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

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Test of heap tables.
  3. #
  4. --disable_warnings
  5. drop table if exists t1,t2;
  6. --enable_warnings
  7. create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps" avg_row_length=100 min_rows=1 max_rows=100;
  8. insert into t1 values(1,1),(2,2),(3,3),(4,4);
  9. delete from t1 where a=1 or a=0;
  10. #show table status like "t1";
  11. show keys from t1;
  12. select * from t1;
  13. select * from t1 where a=4;
  14. update t1 set b=5 where a=4;
  15. update t1 set b=b+1 where a>=3;
  16. replace t1 values (3,3);
  17. select * from t1;
  18. alter table t1 add c int not null, add key using HASH (c,a);
  19. drop table t1;
  20. create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps";
  21. insert into t1 values(1,1),(2,2),(3,3),(4,4);
  22. delete from t1 where a > 0;
  23. select * from t1;
  24. drop table t1;
  25. create table t1 (a int not null,b int not null, primary key using HASH (a)) engine=heap comment="testing heaps";
  26. insert into t1 values(1,1),(2,2),(3,3),(4,4);
  27. alter table t1 modify a int not null auto_increment, engine=myisam, comment="new myisam table";
  28. #show table status like "t1";
  29. select * from t1;
  30. drop table t1;
  31. create table t1 (a int not null) engine=heap;
  32. insert into t1 values (869751),(736494),(226312),(802616);
  33. select * from t1 where a > 736494;
  34. alter table t1 add unique uniq_id using HASH (a);
  35. select * from t1 where a > 736494;
  36. select * from t1 where a = 736494;
  37. select * from t1 where a=869751 or a=736494;
  38. select * from t1 where a in (869751,736494,226312,802616);
  39. alter table t1 engine=myisam;
  40. explain select * from t1 where a in (869751,736494,226312,802616);
  41. drop table t1;
  42. create table t1 (x int not null, y int not null, key x  using HASH (x), unique y  using HASH (y))
  43. engine=heap;
  44. insert into t1 values (1,1),(2,2),(1,3),(2,4),(2,5),(2,6);
  45. select * from t1 where x=1;
  46. select * from t1,t1 as t2 where t1.x=t2.y;
  47. explain select * from t1,t1 as t2 where t1.x=t2.y;
  48. drop table t1;
  49. create table t1 (a int) engine=heap;
  50. insert into t1 values(1);
  51. select max(a) from t1;
  52. drop table t1;
  53. CREATE TABLE t1 ( a int not null default 0, b int not null default 0,  key  using HASH (a),  key  using HASH (b)  ) ENGINE=HEAP;
  54. insert into t1 values(1,1),(1,2),(2,3),(1,3),(1,4),(1,5),(1,6);
  55. select * from t1 where a=1; 
  56. insert into t1 values(1,1),(1,2),(2,3),(1,3),(1,4),(1,5),(1,6);
  57. select * from t1 where a=1;
  58. drop table t1;
  59. create table t1 (id int unsigned not null, primary key  using HASH (id)) engine=HEAP;
  60. insert into t1 values(1);
  61. select max(id) from t1; 
  62. insert into t1 values(2);
  63. select max(id) from t1; 
  64. replace into t1 values(1);
  65. drop table t1;
  66. create table t1 (n int) engine=heap;
  67. drop table t1;
  68. create table t1 (n int) engine=heap;
  69. drop table if exists t1;
  70. # Test of non unique index
  71. CREATE table t1(f1 int not null,f2 char(20) not 
  72. null,index(f2)) engine=heap;
  73. INSERT into t1 set f1=12,f2="bill";
  74. INSERT into t1 set f1=13,f2="bill";
  75. INSERT into t1 set f1=14,f2="bill";
  76. INSERT into t1 set f1=15,f2="bill";
  77. INSERT into t1 set f1=16,f2="ted";
  78. INSERT into t1 set f1=12,f2="ted";
  79. INSERT into t1 set f1=12,f2="ted";
  80. INSERT into t1 set f1=12,f2="ted";
  81. INSERT into t1 set f1=12,f2="ted";
  82. delete from t1 where f2="bill";
  83. select * from t1;
  84. drop table t1;
  85. #
  86. # Test when using part key searches
  87. #
  88. create table t1 (btn char(10) not null, key using HASH (btn)) engine=heap;
  89. insert into t1 values ("hello"),("hello"),("hello"),("hello"),("hello"),("a"),("b"),("c"),("d"),("e"),("f"),("g"),("h"),("i");
  90. explain select * from t1 where btn like "q%";
  91. select * from t1 where btn like "q%";
  92. alter table t1 add column new_col char(1) not null, add key using HASH (btn,new_col), drop key btn;
  93. update t1 set new_col=left(btn,1);
  94. explain select * from t1 where btn="a";
  95. explain select * from t1 where btn="a" and new_col="a";
  96. drop table t1;
  97. #
  98. # Test of NULL keys
  99. #
  100. CREATE TABLE t1 (
  101.   a int default NULL,
  102.   b int default NULL,
  103.   KEY a using HASH (a),
  104.   UNIQUE b using HASH (b)
  105. ) engine=heap;
  106. INSERT INTO t1 VALUES (NULL,99),(99,NULL),(1,1),(2,2),(1,3);
  107. SELECT * FROM t1 WHERE a=NULL;
  108. explain SELECT * FROM t1 WHERE a IS NULL;
  109. SELECT * FROM t1 WHERE a<=>NULL;
  110. SELECT * FROM t1 WHERE b=NULL;
  111. explain SELECT * FROM t1 WHERE b IS NULL;
  112. SELECT * FROM t1 WHERE b<=>NULL;
  113. --error 1062
  114. INSERT INTO t1 VALUES (1,3);
  115. DROP TABLE t1;
  116. #
  117. # Test when deleting all rows
  118. #
  119. CREATE TABLE t1 (a int not null, primary key using HASH (a)) engine=heap;
  120. INSERT into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);
  121. DELETE from t1 where a < 100;
  122. SELECT * from t1;
  123. DROP TABLE t1;
  124. #
  125. # Hash index # records estimate test
  126. #
  127. create table t1
  128. (
  129.   a char(8) not null,
  130.   b char(20) not null,
  131.   c int not null,
  132.   key (a)
  133. ) engine=heap;
  134. insert into t1 values ('aaaa', 'prefill-hash=5',0);
  135. insert into t1 values ('aaab', 'prefill-hash=0',0);
  136. insert into t1 values ('aaac', 'prefill-hash=7',0);
  137. insert into t1 values ('aaad', 'prefill-hash=2',0);
  138. insert into t1 values ('aaae', 'prefill-hash=1',0);
  139. insert into t1 values ('aaaf', 'prefill-hash=4',0);
  140. insert into t1 values ('aaag', 'prefill-hash=3',0);
  141. insert into t1 values ('aaah', 'prefill-hash=6',0);
  142. explain select * from t1 where a='aaaa';
  143. explain select * from t1 where a='aaab';
  144. explain select * from t1 where a='aaac';
  145. explain select * from t1 where a='aaad';
  146. insert into t1 select * from t1;
  147. # avoid statistics differences between normal and ps-protocol tests
  148. flush tables;
  149. explain select * from t1 where a='aaaa';
  150. explain select * from t1 where a='aaab';
  151. explain select * from t1 where a='aaac';
  152. explain select * from t1 where a='aaad';
  153. # a known effect: table reload causes statistics to be updated:
  154. flush tables;
  155. explain select * from t1 where a='aaaa';
  156. explain select * from t1 where a='aaab';
  157. explain select * from t1 where a='aaac';
  158. explain select * from t1 where a='aaad';
  159. # Check if delete_all_rows() updates #hash_buckets
  160. create table t2 as select * from t1;
  161. delete from t1;
  162. insert into t1 select * from t2;
  163. explain select * from t1 where a='aaaa';
  164. explain select * from t1 where a='aaab';
  165. explain select * from t1 where a='aaac';
  166. explain select * from t1 where a='aaad';
  167. drop table t1, t2;
  168. # Btree and hash index use costs. 
  169. create table t1 (
  170.   id int unsigned not null primary key auto_increment, 
  171.   name varchar(20) not null,
  172.   index heap_idx(name),
  173.   index btree_idx using btree(name)
  174. ) engine=heap;
  175. create table t2 (
  176.   id int unsigned not null primary key auto_increment, 
  177.   name varchar(20) not null,
  178.   index btree_idx using btree(name),
  179.   index heap_idx(name)
  180. ) engine=heap;
  181. insert into t1 (name) values ('Matt'), ('Lilu'), ('Corbin'), ('Carly'), 
  182.   ('Suzy'), ('Hoppy'), ('Burrito'), ('Mimi'), ('Sherry'), ('Ben'), ('Phil'), 
  183.   ('Emily'), ('Mike');
  184. insert into t2 select * from t1;
  185. explain select * from t1 where name='matt';
  186. explain select * from t2 where name='matt';
  187. explain select * from t1 where name='Lilu';
  188. explain select * from t2 where name='Lilu';
  189. explain select * from t1 where name='Phil';
  190. explain select * from t2 where name='Phil';
  191. explain select * from t1 where name='Lilu';
  192. explain select * from t2 where name='Lilu';
  193. insert into t1 (name) select name from t2;
  194. insert into t1 (name) select name from t2;
  195. insert into t1 (name) select name from t2;
  196. insert into t1 (name) select name from t2;
  197. insert into t1 (name) select name from t2;
  198. insert into t1 (name) select name from t2;
  199. flush tables;
  200. select count(*) from t1 where name='Matt';
  201. explain select * from t1 ignore index (btree_idx) where name='matt';
  202. show index from t1;
  203. show index from t1;
  204. create table t3
  205. (
  206.   a varchar(20) not null,
  207.   b varchar(20) not null,
  208.   key (a,b)
  209. ) engine=heap;
  210. insert into t3 select name, name from t1;
  211. show index from t3;
  212. show index from t3;
  213. # test rec_per_key use for joins.
  214. explain select * from t1 ignore key(btree_idx), t3 where t1.name='matt' and t3.a = concat('',t1.name) and t3.b=t1.name;
  215. drop table t1, t2, t3;
  216. # Fix for BUG#8371: wrong rec_per_key value for hash index on temporary table
  217. create temporary table t1 ( a int, index (a) ) engine=memory;
  218. insert into t1 values (1),(2),(3),(4),(5);
  219. select a from t1 where a in (1,3);
  220. explain select a from t1 where a in (1,3);
  221. drop table t1;
  222. # End of 4.1 tests