Dear listmembers I am using MySQL 4.0.25.
I am trying to figure out how indexes should be defined to make the following query as fast as possible (i.e. use indexes): (shell script, for copy/paste) echo "DROP TABLE IF EXISTS lrows;" | mysql test echo " CREATE TABLE IF NOT EXISTS lrows ( lock_id INT NOT NULL AUTO_INCREMENT, lock_date DATETIME NOT NULL, lock_usr VARCHAR(255) NOT NULL, lock_db VARCHAR(255) NOT NULL, lock_table VARCHAR(255) NOT NULL, lock_row INT NOT NULL DEFAULT 0, lock_pid INT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (lock_id), INDEX lockone (lock_pid, lock_row), INDEX locktwo (lock_row, lock_pid, lock_db(16), lock_table(16)) ) TYPE=MYISAM;" | mysql test # some sample data echo " INSERT INTO lrows VALUES (NULL,NOW(),'tsp','preg','mbrs',1,1000); INSERT INTO lrows VALUES (NULL,NOW(),'tsp','preg','mbrs',2,1000); INSERT INTO lrows VALUES (NULL,NOW(),'tsp','preg','mbrs',3,1000); INSERT INTO lrows VALUES (NULL,NOW(),'mfu','preg','mbrs',2,9000); INSERT INTO lrows VALUES (NULL,NOW(),'mfu','preg','mbrs',5,9000); INSERT INTO lrows VALUES (NULL,NOW(),'sfa','dbto','othr',2,8000); " | mysql test # my query: echo "EXPLAIN SELECT t2.lock_id FROM lrows AS t1 INNER JOIN lrows AS t2 ON t1.lock_row = t2.lock_row WHERE t1.lock_pid = 1000 AND t2.lock_pid != 1000 AND t2.lock_db = 'preg' AND t2.lock_table = 'mbrs' LIMIT 1;" | mysql -E test # I try to find the 4th row which duplicates lock_row (value 2) for # a certain value of lock_db and lock_table but a different lock_pid EXPLAIN gives: *************************** 1. row *************************** table: t1 type: ref possible_keys: lockone,locktwo key: lockone key_len: 4 ref: const rows: 2 Extra: Using where; Using index *************************** 2. row *************************** table: t2 type: ALL possible_keys: locktwo key: NULL key_len: NULL ref: NULL rows: 5 Extra: Using where This looks quite good for t1 but does not use any index for t2. How should I set up my index to improve this situation? Any help is appreciated. Thomas Spahni -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]