Thanks for your reply. I guess the root of my problem is that MySQL is making a poor choice of index, which I presume is based on the cardinality numbers of each index. When I run ANALYZE TABLE, these values can fluctuate wildly -- between 16 and 26,000, for example. According to the manual, "ANALYZE TABLE counts cardinality by doing 10 random dives into each of the index trees." (this is up from 8 random dives in 4.1.11, which is good!) Maybe the accuracy of this measurement decreases as tables reach millions of rows?

I would really like to avoid rewriting all of my queries to add USE INDEX and STRAIGHT JOIN, since some of them are quite complicated and I would prefer to leave the job to MySQL. My questions are:

1) Can the 10 random dives be made configurable? I would like to do an analyze table with 100 random dives if it would produce a more accurate count. 2) Is there some reason that my index trees would not be uniform? Is there anything I can do about this? 3) For InnoDB tables, does it make sense to always keep max_seeks_for_key at a low value (1, 100, ?)

Many thanks in advance,
-Bob

----- Original Message ----- From: <[EMAIL PROTECTED]>
To: "Bob O'Neill" <[EMAIL PROTECTED]>
Cc: <mysql@lists.mysql.com>
Sent: Friday, June 03, 2005 3:20 PM
Subject: Re: max_seeks_for_key in InnoDB


Hi,
you can use a hint to force specific index usage :
http://lib.hutech.edu.vn/ebookonline/ebook1/0596003064/hpmysql-CHP-5-SECT-4.html

But this is not a good idea since data change and index selectivity can become
bad.

Also, if the index scan + the table scan is bigger than a full table scan, even
you will prefer FTS.

So, according to selectivity, usage of an index can be a very bad idea. Thsi
depends on how many rows your query retreives among the count(*) of the table.


Mathias


Selon Bob O'Neill <[EMAIL PROTECTED]>:

I am having problems with MySQL inconsistently choosing the wrong index, or no index at all, for queries on tables with 20 million rows. Would it be a
good idea for me to set max_seeks_for_key to 1 (or something less than 4
billion), in order to force MySQL to use an index?  We are using InnoDB.

Since InnoDB has clustered indexes, is there ever a good reason for MySQL to
prefer a table scan?

Thanks,
-Bob



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to