MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ndb_statistics.inc
1 -- source include/have_ndb.inc
2 
3 --disable_warnings
4 drop table if exists t1, t2, t3, t4;
5 --enable_warnings
6 
7 CREATE TABLE t10(
8  K INT NOT NULL AUTO_INCREMENT,
9  I INT, J INT,
10  PRIMARY KEY(K),
11  KEY(I,J),
12  UNIQUE KEY(J,K)
13 ) ENGINE=ndbcluster
14  partition by key (K) partitions 1;
15 
16 INSERT INTO t10(I,J) VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0);
17 
18 CREATE TABLE t100 LIKE t10;
19 INSERT INTO t100(I,J)
20  SELECT X.J, X.J+(10*Y.J) FROM t10 AS X,t10 AS Y;
21 
22 CREATE TABLE t10000 LIKE t10;
23 
24 # Insert into t10000 in two chunks to not
25 # exhaust MaxNoOfConcurrentOperations
26 INSERT INTO t10000(I,J)
27  SELECT X.J, X.J+(100*Y.J) FROM t100 AS X,t100 AS Y
28  WHERE X.J<50;
29 INSERT INTO t10000(I,J)
30  SELECT X.J, X.J+(100*Y.J) FROM t100 AS X,t100 AS Y
31  WHERE X.J>=50;
32 
33 ANALYZE TABLE t10,t100,t10000;
34 
35 SELECT COUNT(*) FROM t10;
36 SELECT COUNT(*) FROM t100;
37 SELECT COUNT(*) FROM t10000;
38 
39 #
40 # Bug #59517: Incorrect detection of single row access in
41 # ha_ndbcluster::records_in_range()
42 
43 # Expect a single row (or const) when PK is excact specified
44 EXPLAIN
45 SELECT * FROM t10000 WHERE k = 42;
46 
47 # All queries below should *not* return a single row
48 EXPLAIN
49 SELECT * FROM t10000 WHERE k >= 42 and k < 10000;
50 EXPLAIN
51 SELECT * FROM t10000 WHERE k BETWEEN 42 AND 10000;
52 EXPLAIN
53 SELECT * FROM t10000 WHERE k < 42;
54 EXPLAIN
55 SELECT * FROM t10000 WHERE k > 42;
56 
57 #
58 # Bug #59519 ::set_rec_per_key() assumes ORDER_INDEX to be unique
59 #
60 
61 # 'REF' join of 'Y' should match >1 rows
62 EXPLAIN
63 SELECT * FROM t10000 AS X JOIN t10000 AS Y
64  ON Y.I=X.I AND Y.J = X.I;
65 
66 #
67 # Bug #11804277: INCORRECT INDEX MAY BE SELECTED DUE TO INSUFFICIENT
68 # STATISTICS FROM CLUSTER
69 #
70 
71 # Open bounded range should return 10% of #rows in table
72 EXPLAIN
73 SELECT * FROM t100 WHERE k < 42;
74 EXPLAIN
75 SELECT * FROM t100 WHERE k > 42;
76 EXPLAIN
77 SELECT * FROM t10000 WHERE k < 42;
78 EXPLAIN
79 SELECT * FROM t10000 WHERE k > 42;
80 
81 #Closed bounded range should return 5% of #rows in table
82 EXPLAIN
83 SELECT * FROM t100 WHERE k BETWEEN 42 AND 10000;
84 EXPLAIN
85 SELECT * FROM t10000 WHERE k BETWEEN 42 AND 10000;
86 
87 #EQ-range selectivity depends on
88 # - key length specified
89 # - #rows in table.
90 # - unique/non-unique index
91 # - min 2% selectivity
92 #
93 # Possibly combined with open/closed ranges as
94 # above which further improves selectivity
95 #
96 EXPLAIN
97 SELECT * FROM t10000 WHERE I = 0;
98 EXPLAIN
99 SELECT * FROM t10000 WHERE J = 0;
100 
101 EXPLAIN
102 SELECT * FROM t10000 WHERE I = 0 AND J = 0;
103 
104 EXPLAIN
105 SELECT * FROM t10000 WHERE I = 0;
106 EXPLAIN
107 SELECT * FROM t10000 WHERE I = 0 AND J > 1;
108 EXPLAIN
109 SELECT * FROM t10000 WHERE I = 0 AND J < 1;
110 EXPLAIN
111 SELECT * FROM t10000 WHERE I = 0 AND J BETWEEN 1 AND 10;
112 EXPLAIN
113 SELECT * FROM t10000 WHERE I = 0 AND J = 1;
114 
115 EXPLAIN
116 SELECT * FROM t10000 WHERE J = 0;
117 EXPLAIN
118 SELECT * FROM t10000 WHERE J = 0 AND K > 1;
119 EXPLAIN
120 SELECT * FROM t10000 WHERE J = 0 AND K < 1;
121 EXPLAIN
122 SELECT * FROM t10000 WHERE J = 0 AND K BETWEEN 1 AND 10;
123 EXPLAIN
124 SELECT * FROM t10000 WHERE J = 0 AND K = 1;
125 
126 ## Verify selection of 'best' index
127 ## (The one of index I/J being EQ)
128 EXPLAIN
129 SELECT * FROM t10000 WHERE I = 0 AND J <> 1;
130 EXPLAIN
131 SELECT * FROM t10000 WHERE I <> 0 AND J = 1;
132 EXPLAIN
133 SELECT * FROM t10000 WHERE I <> 0 AND J <> 1;
134 
135 EXPLAIN
136 SELECT * FROM t10000 WHERE J <> 1 AND I = 0;
137 EXPLAIN
138 SELECT * FROM t10000 WHERE J = 1 AND I <> 0;
139 EXPLAIN
140 SELECT * FROM t10000 WHERE J <> 1 AND I <> 0;
141 
142 
143 DROP TABLE t10,t100,t10000;
144 
145 --echo End of 5.1 tests