Here's something strange (2000 sp 2): when I try running these two queries the one with the ORDER BY is faster than the one without -- it doesn't seem to work out that the parts of the UNION are already in the right order for a Merge (which will always? be faster than a hash union).DROP TABLE tb1GOCREATE TABLE tb1 ( i int NOT NULL PRIMARY KEY, a tinyint NOT NULL, b tinyint NOT NULL, c tinyint NOT NULL, d tinyint NOT NULL)GOINSERT INTO tb1SELECT n, n%13, n%17, n%19, n%23FROM NumbersWHERE n < 100000GOCREATE INDEX tb1ac on tb1 (a,c,b,d)CREATE INDEX tb1ad on tb1 (a,d,b,c)CREATE INDEX tb1bc on tb1 (b,c,a,d)CREATE INDEX tb1bd on tb1 (b,d,a,c)GOSELECT * FROM tb1 WHERE (a=0 AND c=1)UNION SELECT * FROM tb1 WHERE (b=0 AND c=1)UNION SELECT * FROM tb1 WHERE (a=0 AND d=1)UNION SELECT * FROM tb1 WHERE (b=0 AND d=1)UNION SELECT * FROM tb1 WHERE (c=0 AND a=1)UNION SELECT * FROM tb1 WHERE (d=0 AND a=1)UNION SELECT * FROM tb1 WHERE (c=0 AND b=1)UNION SELECT * FROM tb1 WHERE (d=0 AND b=1)ORDER BY a,b,c,d,iSELECT * FROM tb1 WHERE (a=0 AND c=1)UNION SELECT * FROM tb1 WHERE (b=0 AND c=1)UNION SELECT * FROM tb1 WHERE (a=0 AND d=1)UNION SELECT * FROM tb1 WHERE (b=0 AND d=1)UNION SELECT * FROM tb1 WHERE (c=0 AND a=1)UNION SELECT * FROM tb1 WHERE (d=0 AND a=1)UNION SELECT * FROM tb1 WHERE (c=0 AND b=1)UNION SELECT * FROM tb1 WHERE (d=0 AND b=1)
Edited by - Arnold Fribble on 01/24/2003 10:00:16