![]() |
|
[ < ] | [ > ] | [ << ] | [ 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