Heikki, mysql> EXPLAIN SELECT * FROM Syslog WHERE datestamp <= 2002021310712; +--------+------+---------------+------+---------+------+---------+----- -------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +--------+------+---------------+------+---------+------+---------+----- -------+ | Syslog | ALL | ds_index | NULL | NULL | NULL | 2204932 | where used | +--------+------+---------------+------+---------+------+---------+----- -------+ 1 row in set (0.00 sec)
How can I force it to use the index? (the indexes look like: mysql> show index from Syslog; +--------+------------+----------+--------------+-------------+--------- --+-------------+----------+--------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Comment | +--------+------------+----------+--------------+-------------+--------- --+-------------+----------+--------+---------+ | Syslog | 1 | ds_index | 1 | datestamp | A | 5893 | NULL | NULL | | | Syslog | 1 | ca_index | 1 | caid | A | 9730 | NULL | NULL | | +--------+------------+----------+--------------+-------------+--------- --+-------------+----------+--------+---------+ 2 rows in set (6.90 sec) ) Thanks, Eric > -----Original Message----- > From: Heikki Tuuri [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, February 13, 2002 5:34 PM > To: [EMAIL PROTECTED] > Subject: Re: Does delete from .. where (condition) use an index? > > > Eric, > > MySQL is very pessimistic about key accesses: it assumes many > of them cause > a random disk read. > > Please print > > EXPLAIN SELECT * FROM Syslog WHERE datestamp < ... > > to see how it accesses the table. > > I have tuned the optimization in 3.23.48 so that it would favor index > searches more often. Please try also with 3.23.48. > > Regards, > > Heikki > Innobase Oy > > "Eric Mayers" wrote in message ... > >I haven't been able to find details about how/if MySQL (InnoDB) > >optimizes deletes. Does it use indexes? Can I force it to use an > >index? > > > >My table is defined as: > > > >CREATE TABLE Syslog( > > id int(11) not null, > > datestamp timestamp(14), > > message char(255), > > KEY ds_index(datestamp), > > KEY id_index(id) > >) type=InnoDB; > > > > > >There are about 15 mil rows, and I'm just trying to delete a small > >portion of them (0.05% perhaps). My delete looks like: > > > >DELETE FROM Syslog WHERE datestamp <= 2002021310712; > > > >(the magic number there comes from "SELECT (min(datestamp) + > 30) AS min > >FROM Syslog" in a previous query). > > > >.. and its taking a very long time.. watching the innodb monitor I'm > >seeing a large number of reads/s (29000) and a small number > of deletes/s > >(10) which makes me believe its not using the index.. > > > >Any way to improve this? > > > >Eric Mayers > >Software Engineer I > > > > > --------------------------------------------------------------------- > Before posting, please check: > http://www.mysql.com/manual.php (the manual) > http://lists.mysql.com/ (the list archive) > > To request this thread, e-mail <[EMAIL PROTECTED]> > To unsubscribe, e-mail > <[EMAIL PROTECTED]> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php