ndb_index_ordered.test 11.7 KB
Newer Older
1 2 3
-- source include/have_ndb.inc

--disable_warnings
joreland@mysql.com's avatar
joreland@mysql.com committed
4
drop table if exists t1, test1, test2;
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
--enable_warnings

#
# Simple test to show use of ordered indexes 
#

CREATE TABLE t1 (
  a int unsigned NOT NULL PRIMARY KEY,
  b int unsigned not null,
  c int unsigned,
  KEY(b)	
) engine=ndbcluster;

insert t1 values(1, 2, 3), (2,3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
select * from t1 order by b;
select * from t1 where b >= 4 order by b;
select * from t1 where b = 4 order by b;
select * from t1 where b > 4 order by b;
select * from t1 where b < 4 order by b;
select * from t1 where b <= 4 order by b;

joreland@mysql.com's avatar
joreland@mysql.com committed
26
# Test of reset_bounds
joreland@mysql.com's avatar
joreland@mysql.com committed
27
select tt1.* from t1 as tt1, t1 as tt2 use index(b) where tt1.b = tt2.b order by tt1.b;
28 29
select a, b, c from t1 where a!=2 and c=6;
select a, b, c from t1 where a!=2 order by a;
joreland@mysql.com's avatar
joreland@mysql.com committed
30

31 32 33 34 35 36 37 38 39
#
# Here we should add some "explain select" to verify that the ordered index is 
# used for these queries.
#

#
# Update using ordered index scan
#

40
update t1 set c = 3 where b = 3;
41 42 43 44 45 46 47 48 49
select * from t1 order by a;
update t1 set c = 10 where b >= 6;
select * from t1 order by a;
update t1 set c = 11 where b < 5;
select * from t1 order by a;
update t1 set c = 12 where b > 0;
select * from t1 order by a;
update t1 set c = 13 where b <= 3;
select * from t1 order by a;
mskold@mysql.com's avatar
mskold@mysql.com committed
50 51
update t1 set b = b + 1 where b > 4 and b < 7;
select * from t1 order by a;
52 53 54
-- Update primary key
update t1 set a = a + 10 where b > 1 and b < 7;
select * from t1 order by a;
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

#
# Delete using ordered index scan
#

drop table t1;

CREATE TABLE t1 (
  a int unsigned NOT NULL PRIMARY KEY,
  b int unsigned not null,
  c int unsigned,
  KEY(b)	
) engine=ndbcluster;

insert t1 values(1, 2, 13), (2,3, 13), (3, 4, 12), (4, 5, 12), (5,6, 12), (6,7, 12);

71
delete from t1 where b = 3;
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
select * from t1 order by a;
delete from t1 where b >= 6;
select * from t1 order by a;
delete from t1 where b < 4;
select * from t1 order by a;
delete from t1 where b > 5;
select * from t1 order by a;
delete from t1 where b <= 4;
select * from t1 order by a;

drop table t1;


#
#multi part key
#
CREATE TABLE t1 (
  a int unsigned NOT NULL PRIMARY KEY,
  b int unsigned not null,
91
  c int unsigned not null
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
) engine = ndb;

create index a1 on t1 (b, c);

insert into t1 values (1, 2, 13);
insert into t1 values (2,3, 13);
insert into t1 values (3, 4, 12);
insert into t1 values (4, 5, 12);
insert into t1 values (5,6, 12);
insert into t1 values (6,7, 12);
insert into t1 values (7, 2, 1);
insert into t1 values (8,3, 6);
insert into t1 values (9, 4, 12);
insert into t1 values (14, 5, 4);
insert into t1 values (15,5,5);
insert into t1 values (16,5, 6);
insert into t1 values (17,4,4);
109 110 111
insert into t1 values (18,1, 7);


112 113

select * from t1 order by a;
114 115 116 117
select * from t1 where b<=5 order by a;
select * from t1 where b<=5 and c=0;
insert into t1 values (19,4, 0);
select * from t1 where b<=5 and c=0;
118
select * from t1 where b=4 and c<=5 order by a;
119 120
select * from t1 where b<=4 and c<=5 order by a;
select * from t1 where b<=5 and c=0 or b<=5 and c=2;
121 122 123

select count(*) from t1 where b = 0;
select count(*) from t1 where b = 1;
124
drop table t1;
125 126 127 128 129

#
# Indexing NULL values
#

130 131 132 133 134 135 136 137
CREATE TABLE t1 (
  a int unsigned NOT NULL PRIMARY KEY,
  b int unsigned,
  c int unsigned,
  KEY bc(b,c)
) engine = ndb;

insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
138
select * from t1 use index (bc) where b IS NULL order by a;
139 140 141 142 143 144 145 146 147 148

select * from t1 use index (bc)order by a;
select * from t1 use index (bc) order by a;
select * from t1 use index (PRIMARY) where b IS NULL order by a;
select * from t1 use index (bc) where b IS NULL order by a;
select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
select * from t1 use index (bc) where b < 4 order by a;
select * from t1 use index (bc) where b IS NOT NULL order by a;
drop table t1;
joreland@mysql.com's avatar
joreland@mysql.com committed
149

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
#
# Order by again, including descending.
#

create table t1 (
  a int unsigned primary key,
  b int unsigned,
  c char(10),
  key bc (b, c)
) engine=ndb;

insert into t1 values(1,1,'a'),(2,2,'b'),(3,3,'c'),(4,4,'d'),(5,5,'e');
insert into t1 select a*7,10*b,'f' from t1;
insert into t1 select a*13,10*b,'g' from t1;
insert into t1 select a*17,10*b,'h' from t1;
insert into t1 select a*19,10*b,'i' from t1;
insert into t1 select a*23,10*b,'j' from t1;
insert into t1 select a*29,10*b,'k' from t1;
#
select b, c from t1 where b <= 10 and c <'f' order by b, c;
select b, c from t1 where b <= 10 and c <'f' order by b desc, c desc;
#
select b, c from t1 where b=4000 and c<'k' order by b, c;
select b, c from t1 where b=4000 and c<'k' order by b desc, c desc;
select b, c from t1 where 1000<=b and b<=100000 and c<'j' order by b, c;
select b, c from t1 where 1000<=b and b<=100000 and c<'j' order by b desc, c desc;
#
select min(b), max(b) from t1;
pekka@mysql.com's avatar
pekka@mysql.com committed
178 179
#
drop table t1;
180

joreland@mysql.com's avatar
joreland@mysql.com committed
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
#
# Bug #6435
CREATE TABLE test1 (
SubscrID int(11) NOT NULL auto_increment,
UsrID int(11) NOT NULL default '0',
PRIMARY KEY  (SubscrID),
KEY idx_usrid (UsrID)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;

INSERT INTO test1 VALUES (2,224),(3,224),(1,224);

CREATE TABLE test2 (
SbclID int(11) NOT NULL auto_increment,
SbcrID int(11) NOT NULL default '0',
PRIMARY KEY  (SbclID),
KEY idx_sbcrid (SbcrID)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;

INSERT INTO test2 VALUES (3,2),(1,1),(2,1),(4,2);
select * from test1 order by 1;
select * from test2 order by 1;
SELECT s.SubscrID,l.SbclID FROM test1 s left JOIN test2 l ON
l.SbcrID=s.SubscrID WHERE s.UsrID=224 order by 1, 2;
drop table test1;
drop table test2;
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222

# bug#7424 + bug#7725

create table t1 (
  pk int primary key,
  dt datetime not null,
  da date not null,
  ye year not null,
  ti time not null,
  ts timestamp not null,
  index(dt),
  index(da),
  index(ye),
  index(ti),
  index(ts)
) engine=ndb;

223 224 225 226 227 228 229 230 231 232
insert into t1 (pk,dt,da,ye,ti,ts) values
  (1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59', '2001-01-01 23:00:59'),
  (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59', '2001-01-01 13:00:59'),
  (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00', '2001-01-01 00:00:00'),
  (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00', '2001-01-01 00:00:00'),
  (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06', '2001-01-01 06:06:06'),
  (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06', '2001-01-01 06:06:06'),
  (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10', '2001-01-01 10:11:10'),
  (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11', '2001-01-01 10:11:11'),
  (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59', '2001-01-01 23:59:59');
233 234

# datetime
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
select count(*)-9 from t1 use index (dt) where dt >  '1900-01-01 00:00:00';
select count(*)-6 from t1 use index (dt) where dt >= '1955-12-31 00:00:00';
select count(*)-5 from t1 use index (dt) where dt >  '1955-12-31 00:00:00';
select count(*)-5 from t1 use index (dt) where dt <  '1970-03-03 22:22:22';
select count(*)-7 from t1 use index (dt) where dt <  '2001-01-01 10:11:11';
select count(*)-8 from t1 use index (dt) where dt <= '2001-01-01 10:11:11';
select count(*)-9 from t1 use index (dt) where dt <= '2055-01-01 00:00:00';

# date
select count(*)-9 from t1 use index (da) where da >  '1900-01-01';
select count(*)-6 from t1 use index (da) where da >= '1955-12-31';
select count(*)-5 from t1 use index (da) where da >  '1955-12-31';
select count(*)-5 from t1 use index (da) where da <  '1970-03-03';
select count(*)-6 from t1 use index (da) where da <  '2001-01-01';
select count(*)-8 from t1 use index (da) where da <= '2001-01-02';
select count(*)-9 from t1 use index (da) where da <= '2055-01-01';
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269

# year
select count(*)-9 from t1 use index (ye) where ye >  '1900';
select count(*)-6 from t1 use index (ye) where ye >= '1955';
select count(*)-5 from t1 use index (ye) where ye >  '1955';
select count(*)-5 from t1 use index (ye) where ye <  '1970';
select count(*)-6 from t1 use index (ye) where ye <  '2001';
select count(*)-8 from t1 use index (ye) where ye <= '2001';
select count(*)-9 from t1 use index (ye) where ye <= '2055';

# time
select count(*)-9 from t1 use index (ti) where ti >= '00:00:00';
select count(*)-7 from t1 use index (ti) where ti >  '00:00:00';
select count(*)-7 from t1 use index (ti) where ti >  '05:05:05';
select count(*)-5 from t1 use index (ti) where ti >  '06:06:06';
select count(*)-5 from t1 use index (ti) where ti <  '10:11:11';
select count(*)-6 from t1 use index (ti) where ti <= '10:11:11';
select count(*)-8 from t1 use index (ti) where ti <  '23:59:59';
select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
270

271 272 273 274 275 276 277 278 279 280
# timestamp
select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00';
select count(*)-7 from t1 use index (ts) where ts >  '2001-01-01 00:00:00';
select count(*)-7 from t1 use index (ts) where ts >  '2001-01-01 05:05:05';
select count(*)-5 from t1 use index (ts) where ts >  '2001-01-01 06:06:06';
select count(*)-5 from t1 use index (ts) where ts <  '2001-01-01 10:11:11';
select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11';
select count(*)-8 from t1 use index (ts) where ts <  '2001-01-01 23:59:59';
select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';

281 282
drop table t1;

283 284
# decimal (not the new 5.0 thing)

285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
#create table t1 (
#  a int primary key,
#  s decimal(12),
#  t decimal(12, 5),
#  u decimal(12) unsigned,
#  v decimal(12, 5) unsigned,
#  key (s),
#  key (t),
#  key (u),
#  key (v)
#) engine=ndb;
##
#insert into t1 values
#  ( 0, -000000000007, -0000061.00003,  000000000061,  0000965.00042),
#  ( 1, -000000000007, -0000061.00042,  000000000061,  0000965.00003),
#  ( 2, -071006035767,  4210253.00024,  000000000001,  0000001.84488),
#  ( 3,  000000007115,  0000000.77607,  000077350625,  0000018.00013),
#  ( 4, -000000068391, -0346486.00000,  000000005071,  0005334.00002),
#  ( 5, -521579890459, -1936874.00001,  000000000154,  0000003.00018),
#  ( 6, -521579890459, -1936874.00018,  000000000154,  0000003.00001),
#  ( 7,  000000000333,  0000051.39140,  000000907958,  0788643.08374),
#  ( 8,  000042731229,  0000009.00000,  000000000009,  6428667.00000),
#  ( 9, -000008159769,  0000918.00004,  000096951421,  7607730.00008);
##
#select count(*)- 5 from t1 use index (s) where s  < -000000000007;
#select count(*)- 7 from t1 use index (s) where s <= -000000000007;
#select count(*)- 2 from t1 use index (s) where s  = -000000000007;
#select count(*)- 5 from t1 use index (s) where s >= -000000000007;
#select count(*)- 3 from t1 use index (s) where s  > -000000000007;
##
#select count(*)- 4 from t1 use index (t) where t  < -0000061.00003;
#select count(*)- 5 from t1 use index (t) where t <= -0000061.00003;
#select count(*)- 1 from t1 use index (t) where t  = -0000061.00003;
#select count(*)- 6 from t1 use index (t) where t >= -0000061.00003;
#select count(*)- 5 from t1 use index (t) where t  > -0000061.00003;
##
#select count(*)- 2 from t1 use index (u) where u  <  000000000061;
#select count(*)- 4 from t1 use index (u) where u <=  000000000061;
#select count(*)- 2 from t1 use index (u) where u  =  000000000061;
#select count(*)- 8 from t1 use index (u) where u >=  000000000061;
#select count(*)- 6 from t1 use index (u) where u  >  000000000061;
##
#select count(*)- 5 from t1 use index (v) where v  <  0000965.00042;
#select count(*)- 6 from t1 use index (v) where v <=  0000965.00042;
#select count(*)- 1 from t1 use index (v) where v  =  0000965.00042;
#select count(*)- 5 from t1 use index (v) where v >=  0000965.00042;
#select count(*)- 4 from t1 use index (v) where v  >  0000965.00042;
332
#
333
#drop table t1;
334

335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
# bug#7798
create table t1(a int primary key, b int not null, index(b));
insert into t1 values (1,1), (2,2);
connect (con1,localhost,,,test);
connect (con2,localhost,,,test);
connection con1;
set autocommit=0;
begin;
select count(*) from t1;
connection con2;
ALTER TABLE t1 ADD COLUMN c int;
connection con1;
select a from t1 where b = 2;
show tables;
drop table t1;