![]() |
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
MySQL uses a cost based optimiser to find out the best way to resolve a query. In many cases MySQL can calculate the best possible query plan but in some cases MySQL doesn't have enough information about the data at hand and have to do some 'educated' guesses about the data.
This manual section is intended for the cases when MySQL doesn't get it right.
The tools one has available to help MySQL do the 'right' things are:
EXPLAIN. See section EXPLAIN.
ANALYZE TABLE. See section ANALYZE TABLE.
USE INDEX, FORCE INDEX and IGNORE INDEX. See section SELECT Syntax.
STRAIGHT JOIN. See section SELECT Syntax.
SHOW VARIABLES.
| A.6.1 How to avoid table scan,,, |
EXPLAIN will show ALL in the type column when MySQL
uses a table scan to resolve a query. This happens usually when:
ON or WHERE clause
for indexed columns.
WHERE Clauses.
What you can do to avoid a 'wrong' table scan for big tables are:
ANALYZE TABLE for the scanned table to update key distributions.
See section ANALYZE TABLE Syntax.
FORCE INDEX for the scanned table to tell MySQL that table
scans are very expensive compared to use one of the given index. See section SELECT Syntax.
SELECT * FROM t1,t2 force index(index_for_column) WHERE t1.column=t2.column; |
mysqld with --max-seeks-for-key=1000 or do SET
MAX_SEEKS_FOR_KEY=1000 to tell the optimiser that for no key scan will
cause more than 1000 key seeks.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
Hosting by: Hurra Communications Ltd.
Generated: 2007-01-26 17:58:44