Here is a script that runs on h2 that tries to show some bad index use
(based heavily on the queries in this benchmark):

create table t (
  pk bigint not null primary key
);

@LOOP 1048576 insert into t values (?);

analyze;

explain SELECT pk FROM t
 WHERE pk = 1;
explain SELECT pk FROM t
  WHERE pk IN (1, 1000000);
explain SELECT pk FROM t
  WHERE pk = 1 OR pk = 1000000;
explain SELECT pk FROM t
  WHERE pk = 1 AND pk = 1000000;
explain SELECT count(pk) FROM t
  WHERE pk = 1 AND pk > 900000;

SELECT pk FROM t WHERE pk = 1;
SELECT pk FROM t WHERE pk IN (1, 1000000);
SELECT pk FROM t WHERE pk = 1 OR pk = 1000000;
SELECT pk FROM t WHERE pk = 1 AND pk = 1000000; -- odd query!
SELECT count(pk) FROM t WHERE pk = 1 AND pk > 900000;

drop table t;


The plans it comes with with are:

SELECT PK
FROM PUBLIC.T /* PUBLIC.PRIMARY_KEY_5: PK = 1 */
WHERE PK = 1
-- 0 ms

SELECT PK
FROM PUBLIC.T /* PUBLIC.PRIMARY_KEY_5: PK >= 1 AND PK <= 1000000 */
WHERE PK IN(1, 1000000)
-- 2781 ms

SELECT PK
FROM PUBLIC.T /* PUBLIC.T_TABLE_SCAN */
WHERE (PK = 1) OR (PK = 1000000)
-- 14266 ms

SELECT PK
FROM PUBLIC.T /* PUBLIC.PRIMARY_KEY_5: PK = 1 AND PK = 1000000 */
WHERE (PK = 1) AND (PK = 1000000)
-- 0 ms

SELECT COUNT(PK)
FROM PUBLIC.T /* PUBLIC.PRIMARY_KEY_5: PK = 1 AND PK > 900000 */
WHERE (PK = 1) AND (PK > 900000)
-- 0 ms

Brish

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to