null_key.result
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:14k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. drop table if exists t1,t2;
  2. create table t1 (a int, b int not null,unique key (a,b),index(b)) engine=myisam;
  3. insert ignore into t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(null,7),(9,9),(8,8),(7,7),(null,9),(null,9),(6,6);
  4. explain select * from t1 where a is null;
  5. id select_type table type possible_keys key key_len ref rows Extra
  6. 1 SIMPLE t1 ref a a 5 const 3 Using where; Using index
  7. explain select * from t1 where a is null and b = 2;
  8. id select_type table type possible_keys key key_len ref rows Extra
  9. 1 SIMPLE t1 ref a,b a 9 const,const 1 Using where; Using index
  10. explain select * from t1 where a is null and b = 7;
  11. id select_type table type possible_keys key key_len ref rows Extra
  12. 1 SIMPLE t1 ref a,b a 9 const,const 1 Using where; Using index
  13. explain select * from t1 where a=2 and b = 2;
  14. id select_type table type possible_keys key key_len ref rows Extra
  15. 1 SIMPLE t1 const a,b a 9 const,const 1 Using index
  16. explain select * from t1 where a<=>b limit 2;
  17. id select_type table type possible_keys key key_len ref rows Extra
  18. 1 SIMPLE t1 index NULL a 9 NULL 12 Using where; Using index
  19. explain select * from t1 where (a is null or a > 0 and a < 3) and b < 5 limit 3;
  20. id select_type table type possible_keys key key_len ref rows Extra
  21. 1 SIMPLE t1 range a,b a 9 NULL 3 Using where; Using index
  22. explain select * from t1 where (a is null or a = 7) and b=7;
  23. id select_type table type possible_keys key key_len ref rows Extra
  24. 1 SIMPLE t1 ref_or_null a,b a 9 const,const 2 Using where; Using index
  25. explain select * from t1 where (a is null or a = 7) and b=7 order by a;
  26. id select_type table type possible_keys key key_len ref rows Extra
  27. 1 SIMPLE t1 ref_or_null a,b a 9 const,const 2 Using where; Using index; Using filesort
  28. explain select * from t1 where (a is null and b>a) or a is null and b=7 limit 2;
  29. id select_type table type possible_keys key key_len ref rows Extra
  30. 1 SIMPLE t1 ref a,b a 5 const 3 Using where; Using index
  31. explain select * from t1 where a is null and b=9 or a is null and b=7 limit 3;
  32. id select_type table type possible_keys key key_len ref rows Extra
  33. 1 SIMPLE t1 range a,b a 9 NULL 2 Using where; Using index
  34. explain select * from t1 where a > 1 and a < 3 limit 1;
  35. id select_type table type possible_keys key key_len ref rows Extra
  36. 1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index
  37. explain select * from t1 where a > 8 and a < 9;
  38. id select_type table type possible_keys key key_len ref rows Extra
  39. 1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index
  40. select * from t1 where a is null;
  41. a b
  42. NULL 7
  43. NULL 9
  44. NULL 9
  45. select * from t1 where a is null and b = 7;
  46. a b
  47. NULL 7
  48. select * from t1 where a<=>b limit 2;
  49. a b
  50. 1 1
  51. 2 2
  52. select * from t1 where (a is null or a > 0 and a < 3) and b < 5 limit 3;
  53. a b
  54. 1 1
  55. 2 2
  56. select * from t1 where (a is null or a > 0 and a < 3) and b > 7 limit 3;
  57. a b
  58. NULL 9
  59. NULL 9
  60. select * from t1 where (a is null or a = 7) and b=7;
  61. a b
  62. 7 7
  63. NULL 7
  64. select * from t1 where a is null and b=9 or a is null and b=7 limit 3;
  65. a b
  66. NULL 7
  67. NULL 9
  68. NULL 9
  69. create table t2 like t1;
  70. insert into t2 select * from t1;
  71. alter table t1 modify b blob not null, add c int not null, drop key a, add unique key (a,b(20),c), drop key b, add key (b(10));
  72. explain select * from t1 where a is null and b = 2;
  73. id select_type table type possible_keys key key_len ref rows Extra
  74. 1 SIMPLE t1 ref a,b a 5 const 3 Using where
  75. explain select * from t1 where a is null and b = 2 and c=0;
  76. id select_type table type possible_keys key key_len ref rows Extra
  77. 1 SIMPLE t1 ref a,b a 5 const 3 Using where
  78. explain select * from t1 where a is null and b = 7 and c=0;
  79. id select_type table type possible_keys key key_len ref rows Extra
  80. 1 SIMPLE t1 ref a,b a 5 const 3 Using where
  81. explain select * from t1 where a=2 and b = 2;
  82. id select_type table type possible_keys key key_len ref rows Extra
  83. 1 SIMPLE t1 ref a,b a 5 const 1 Using where
  84. explain select * from t1 where a<=>b limit 2;
  85. id select_type table type possible_keys key key_len ref rows Extra
  86. 1 SIMPLE t1 ALL NULL NULL NULL NULL 12 Using where
  87. explain select * from t1 where (a is null or a > 0 and a < 3) and b < 5 and c=0 limit 3;
  88. id select_type table type possible_keys key key_len ref rows Extra
  89. 1 SIMPLE t1 range a,b a 5 NULL 5 Using where
  90. explain select * from t1 where (a is null or a = 7) and b=7 and c=0;
  91. id select_type table type possible_keys key key_len ref rows Extra
  92. 1 SIMPLE t1 ref_or_null a,b a 5 const 4 Using where
  93. explain select * from t1 where (a is null and b>a) or a is null and b=7 limit 2;
  94. id select_type table type possible_keys key key_len ref rows Extra
  95. 1 SIMPLE t1 ref a,b a 5 const 3 Using where
  96. explain select * from t1 where a is null and b=9 or a is null and b=7 limit 3;
  97. id select_type table type possible_keys key key_len ref rows Extra
  98. 1 SIMPLE t1 ref a,b a 5 const 3 Using where
  99. explain select * from t1 where a > 1 and a < 3 limit 1;
  100. id select_type table type possible_keys key key_len ref rows Extra
  101. 1 SIMPLE t1 range a a 5 NULL 1 Using where
  102. explain select * from t1 where a is null and b=7 or a > 1 and a < 3 limit 1;
  103. id select_type table type possible_keys key key_len ref rows Extra
  104. 1 SIMPLE t1 range a,b a 5 NULL 4 Using where
  105. explain select * from t1 where a > 8 and a < 9;
  106. id select_type table type possible_keys key key_len ref rows Extra
  107. 1 SIMPLE t1 range a a 5 NULL 1 Using where
  108. explain select * from t1 where b like "6%";
  109. id select_type table type possible_keys key key_len ref rows Extra
  110. 1 SIMPLE t1 range b b 12 NULL 1 Using where
  111. select * from t1 where a is null;
  112. a b c
  113. NULL 7 0
  114. NULL 9 0
  115. NULL 9 0
  116. select * from t1 where a is null and b = 7 and c=0;
  117. a b c
  118. NULL 7 0
  119. select * from t1 where a<=>b limit 2;
  120. a b c
  121. 1 1 0
  122. 2 2 0
  123. select * from t1 where (a is null or a > 0 and a < 3) and b < 5 limit 3;
  124. a b c
  125. 1 1 0
  126. 2 2 0
  127. select * from t1 where (a is null or a > 0 and a < 3) and b > 7 limit 3;
  128. a b c
  129. NULL 9 0
  130. NULL 9 0
  131. select * from t1 where (a is null or a = 7) and b=7 and c=0;
  132. a b c
  133. 7 7 0
  134. NULL 7 0
  135. select * from t1 where a is null and b=9 or a is null and b=7 limit 3;
  136. a b c
  137. NULL 7 0
  138. NULL 9 0
  139. NULL 9 0
  140. select * from t1 where b like "6%";
  141. a b c
  142. 6 6 0
  143. drop table t1;
  144. rename table t2 to t1;
  145. alter table t1 modify b int null;
  146. insert into t1 values (7,null), (8,null), (8,7);
  147. explain select * from t1 where a = 7 and (b=7 or b is null);
  148. id select_type table type possible_keys key key_len ref rows Extra
  149. 1 SIMPLE t1 ref_or_null a,b a 10 const,const 2 Using where; Using index
  150. select * from t1 where a = 7 and (b=7 or b is null);
  151. a b
  152. 7 7
  153. 7 NULL
  154. explain select * from t1 where (a = 7 or a is null) and (b=7 or b is null);
  155. id select_type table type possible_keys key key_len ref rows Extra
  156. 1 SIMPLE t1 range a,b a 10 NULL 3 Using where; Using index
  157. select * from t1 where (a = 7 or a is null) and (b=7 or b is null);
  158. a b
  159. NULL 7
  160. 7 NULL
  161. 7 7
  162. explain select * from t1 where (a = 7 or a is null) and (a = 7 or a is null);
  163. id select_type table type possible_keys key key_len ref rows Extra
  164. 1 SIMPLE t1 ref_or_null a a 5 const 5 Using where; Using index
  165. select * from t1 where (a = 7 or a is null) and (a = 7 or a is null);
  166. a b
  167. 7 NULL
  168. 7 7
  169. NULL 7
  170. NULL 9
  171. NULL 9
  172. create table t2 (a int);
  173. insert into t2 values (7),(8);
  174. explain select * from t2 straight_join t1 where t1.a=t2.a and b is null;
  175. id select_type table type possible_keys key key_len ref rows Extra
  176. 1 SIMPLE t2 ALL NULL NULL NULL NULL 2
  177. 1 SIMPLE t1 ref a,b a 10 test.t2.a,const 2 Using where; Using index
  178. drop index b on t1;
  179. explain select * from t2,t1 where t1.a=t2.a and b is null;
  180. id select_type table type possible_keys key key_len ref rows Extra
  181. 1 SIMPLE t2 ALL NULL NULL NULL NULL 2
  182. 1 SIMPLE t1 ref a a 10 test.t2.a,const 2 Using where; Using index
  183. select * from t2,t1 where t1.a=t2.a and b is null;
  184. a a b
  185. 7 7 NULL
  186. 8 8 NULL
  187. explain select * from t2,t1 where t1.a=t2.a and (b= 7 or b is null);
  188. id select_type table type possible_keys key key_len ref rows Extra
  189. 1 SIMPLE t2 ALL NULL NULL NULL NULL 2
  190. 1 SIMPLE t1 ref_or_null a a 10 test.t2.a,const 4 Using where; Using index
  191. select * from t2,t1 where t1.a=t2.a and (b= 7 or b is null);
  192. a a b
  193. 7 7 7
  194. 7 7 NULL
  195. 8 8 7
  196. 8 8 NULL
  197. explain select * from t2,t1 where (t1.a=t2.a or t1.a is null) and b= 7;
  198. id select_type table type possible_keys key key_len ref rows Extra
  199. 1 SIMPLE t2 ALL NULL NULL NULL NULL 2
  200. 1 SIMPLE t1 ref_or_null a a 10 test.t2.a,const 4 Using where; Using index
  201. select * from t2,t1 where (t1.a=t2.a or t1.a is null) and b= 7;
  202. a a b
  203. 7 7 7
  204. 7 NULL 7
  205. 8 8 7
  206. 8 NULL 7
  207. explain select * from t2,t1 where (t1.a=t2.a or t1.a is null) and (b= 7 or b is null);
  208. id select_type table type possible_keys key key_len ref rows Extra
  209. 1 SIMPLE t2 ALL NULL NULL NULL NULL 2
  210. 1 SIMPLE t1 ref_or_null a a 5 test.t2.a 4 Using where; Using index
  211. select * from t2,t1 where (t1.a=t2.a or t1.a is null) and (b= 7 or b is null);
  212. a a b
  213. 7 7 NULL
  214. 7 7 7
  215. 7 NULL 7
  216. 8 8 NULL
  217. 8 8 7
  218. 8 NULL 7
  219. insert into t2 values (null),(6);
  220. delete from t1 where a=8;
  221. explain select * from t2,t1 where t1.a=t2.a or t1.a is null;
  222. id select_type table type possible_keys key key_len ref rows Extra
  223. 1 SIMPLE t2 ALL NULL NULL NULL NULL 4
  224. 1 SIMPLE t1 ref_or_null a a 5 test.t2.a 4 Using where; Using index
  225. explain select * from t2,t1 where t1.a<=>t2.a or (t1.a is null and t1.b <> 9);
  226. id select_type table type possible_keys key key_len ref rows Extra
  227. 1 SIMPLE t2 ALL NULL NULL NULL NULL 4
  228. 1 SIMPLE t1 ref_or_null a a 5 test.t2.a 4 Using where; Using index
  229. select * from t2,t1 where t1.a<=>t2.a or (t1.a is null and t1.b <> 9);
  230. a a b
  231. 7 7 NULL
  232. 7 7 7
  233. 7 NULL 7
  234. 8 NULL 7
  235. NULL NULL 7
  236. NULL NULL 9
  237. NULL NULL 9
  238. 6 6 6
  239. 6 NULL 7
  240. drop table t1,t2;
  241. CREATE TABLE t1 (
  242. id int(10) unsigned NOT NULL auto_increment,
  243. uniq_id int(10) unsigned default NULL,
  244. PRIMARY KEY  (id),
  245. UNIQUE KEY idx1 (uniq_id)
  246. ) ENGINE=MyISAM;
  247. CREATE TABLE t2 (
  248. id int(10) unsigned NOT NULL auto_increment,
  249. uniq_id int(10) unsigned default NULL,
  250. PRIMARY KEY  (id)
  251. ) ENGINE=MyISAM;
  252. INSERT INTO t1 VALUES (1,NULL),(2,NULL),(3,1),(4,2),(5,NULL),(6,NULL),(7,3),(8,4),(9,NULL),(10,NULL);
  253. INSERT INTO t2 VALUES (1,NULL),(2,NULL),(3,1),(4,2),(5,NULL),(6,NULL),(7,3),(8,4),(9,NULL),(10,NULL);
  254. explain select id from t1 where uniq_id is null;
  255. id select_type table type possible_keys key key_len ref rows Extra
  256. 1 SIMPLE t1 ref idx1 idx1 5 const 1 Using where
  257. explain select id from t1 where uniq_id =1;
  258. id select_type table type possible_keys key key_len ref rows Extra
  259. 1 SIMPLE t1 const idx1 idx1 5 const 1
  260. UPDATE t1 SET id=id+100 where uniq_id is null;
  261. UPDATE t2 SET id=id+100 where uniq_id is null;
  262. select id from t1 where uniq_id is null;
  263. id
  264. 101
  265. 102
  266. 105
  267. 106
  268. 109
  269. 110
  270. select id from t2 where uniq_id is null;
  271. id
  272. 101
  273. 102
  274. 105
  275. 106
  276. 109
  277. 110
  278. DELETE FROM t1 WHERE uniq_id IS NULL;
  279. DELETE FROM t2 WHERE uniq_id IS NULL;
  280. SELECT * FROM t1 ORDER BY uniq_id, id;
  281. id uniq_id
  282. 3 1
  283. 4 2
  284. 7 3
  285. 8 4
  286. SELECT * FROM t2 ORDER BY uniq_id, id;
  287. id uniq_id
  288. 3 1
  289. 4 2
  290. 7 3
  291. 8 4
  292. DROP table t1,t2;
  293. CREATE TABLE `t1` (
  294. `order_id` char(32) NOT NULL default '',
  295. `product_id` char(32) NOT NULL default '',
  296. `product_type` int(11) NOT NULL default '0',
  297. PRIMARY KEY  (`order_id`,`product_id`,`product_type`)
  298. ) ENGINE=MyISAM;
  299. CREATE TABLE `t2` (
  300. `order_id` char(32) NOT NULL default '',
  301. `product_id` char(32) NOT NULL default '',
  302. `product_type` int(11) NOT NULL default '0',
  303. PRIMARY KEY  (`order_id`,`product_id`,`product_type`)
  304. ) ENGINE=MyISAM;
  305. INSERT INTO t1 (order_id, product_id, product_type) VALUES
  306. ('3d7ce39b5d4b3e3d22aaafe9b633de51',1206029, 3),
  307. ('3d7ce39b5d4b3e3d22aaafe9b633de51',5880836, 3),
  308. ('9d9aad7764b5b2c53004348ef8d34500',2315652, 3);
  309. INSERT INTO t2 (order_id, product_id, product_type) VALUES
  310. ('9d9aad7764b5b2c53004348ef8d34500',2315652, 3);
  311. select t1.* from t1
  312. left join t2 using(order_id, product_id, product_type)
  313. where t2.order_id=NULL;
  314. order_id product_id product_type
  315. select t1.* from t1
  316. left join t2 using(order_id, product_id, product_type)
  317. where t2.order_id is NULL;
  318. order_id product_id product_type
  319. 3d7ce39b5d4b3e3d22aaafe9b633de51 1206029 3
  320. 3d7ce39b5d4b3e3d22aaafe9b633de51 5880836 3
  321. drop table t1,t2;
  322. create table t1 (id int);
  323. insert into t1 values (null), (0);
  324. create table t2 (id int);
  325. insert into t2 values (null);
  326. select * from t1, t2 where t1.id = t2.id;
  327. id id
  328. alter table t1 add key id (id);
  329. select * from t1, t2 where t1.id = t2.id;
  330. id id
  331. drop table t1,t2;
  332. create table t1 (
  333. id  integer,
  334. id2 integer not null,
  335. index (id),
  336. index (id2)
  337. );
  338. insert into t1 values(null,null),(1,1);
  339. Warnings:
  340. Warning 1263 Data truncated; NULL supplied to NOT NULL column 'id2' at row 1
  341. select * from t1;
  342. id id2
  343. NULL 0
  344. 1 1
  345. select * from t1 where id <=> null;
  346. id id2
  347. NULL 0
  348. select * from t1 where id <=> null or id > 0;
  349. id id2
  350. NULL 0
  351. 1 1
  352. select * from t1 where id is null or id > 0;
  353. id id2
  354. NULL 0
  355. 1 1
  356. select * from t1 where id2 <=> null or id2 > 0;
  357. id id2
  358. 1 1
  359. select * from t1 where id2 is null or id2 > 0;
  360. id id2
  361. 1 1
  362. delete from t1 where id <=> NULL;
  363. select * from t1;
  364. id id2
  365. 1 1
  366. drop table t1;
  367. CREATE TABLE t1 (a int);
  368. CREATE TABLE t2 (a int, b int, INDEX idx(a));
  369. CREATE TABLE t3 (b int, INDEX idx(b));
  370. CREATE TABLE t4 (b int, INDEX idx(b));
  371. INSERT INTO t1 VALUES (1), (2), (3), (4);
  372. INSERT INTO t2 VALUES (1, 1), (3, 1);
  373. INSERT INTO t3 VALUES 
  374. (NULL), (NULL), (NULL), (NULL), (NULL),
  375. (NULL), (NULL), (NULL), (NULL), (NULL);
  376. INSERT INTO t4 SELECT * FROM t3;
  377. INSERT INTO t3 SELECT * FROM t4;
  378. INSERT INTO t4 SELECT * FROM t3;
  379. INSERT INTO t3 SELECT * FROM t4;
  380. INSERT INTO t4 SELECT * FROM t3;
  381. INSERT INTO t3 SELECT * FROM t4;
  382. INSERT INTO t4 SELECT * FROM t3;
  383. INSERT INTO t3 SELECT * FROM t4;
  384. INSERT INTO t4 SELECT * FROM t3;
  385. INSERT INTO t3 SELECT * FROM t4;
  386. INSERT INTO t4 SELECT * FROM t3;
  387. INSERT INTO t3 SELECT * FROM t4;
  388. INSERT INTO t4 SELECT * FROM t3;
  389. INSERT INTO t3 SELECT * FROM t4;
  390. INSERT INTO t4 SELECT * FROM t3;
  391. INSERT INTO t3 SELECT * FROM t4;
  392. INSERT INTO t3 VALUES (2), (3);
  393. ANALYZE table t1, t2, t3;
  394. Table Op Msg_type Msg_text
  395. test.t1 analyze status OK
  396. test.t2 analyze status OK
  397. test.t3 analyze status OK
  398. SELECT COUNT(*) FROM t3;
  399. COUNT(*)
  400. 15972
  401. EXPLAIN SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a
  402. LEFT JOIN t3 ON t2.b=t3.b;
  403. id select_type table type possible_keys key key_len ref rows Extra
  404. 1 SIMPLE t1 ALL NULL NULL NULL NULL 4
  405. 1 SIMPLE t2 ref idx idx 5 test.t1.a 1
  406. 1 SIMPLE t3 ref idx idx 5 test.t2.b 1 Using index
  407. FLUSH STATUS ;
  408. SELECT SQL_CALC_FOUND_ROWS * FROM t1 LEFT JOIN t2 ON t1.a=t2.a
  409. LEFT JOIN t3 ON t2.b=t3.b;
  410. a a b b
  411. 1 1 1 NULL
  412. 2 NULL NULL NULL
  413. 3 3 1 NULL
  414. 4 NULL NULL NULL
  415. SELECT FOUND_ROWS();
  416. FOUND_ROWS()
  417. 4
  418. SHOW STATUS LIKE "handler_read%";
  419. Variable_name Value
  420. Handler_read_first 0
  421. Handler_read_key 6
  422. Handler_read_next 2
  423. Handler_read_prev 0
  424. Handler_read_rnd 0
  425. Handler_read_rnd_next 5
  426. DROP TABLE t1,t2,t3,t4;