|
A.6. Optimizer-Related Issues
MySQL uses a cost-based optimizer to determine the best way to
resolve a query. In many cases, MySQL can calculate the best
possible query plan, but sometimes MySQL doesn't have enough
information about the data at hand and has to make
“educated” guesses about the data.
For the cases when MySQL does not do the "right" thing, tools that
you have available to help MySQL are:
-
Use the EXPLAIN statement to get
information about how MySQL processes a query. To use it, just
add the keyword EXPLAIN to the front of
your SELECT statement:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN is discussed in more detail in
Section 7.2.1, “Optimizing Queries with EXPLAIN ”.
Use ANALYZE TABLE
tbl_name to update the
key distributions for the scanned table. See
Section 13.5.2.1, “ANALYZE TABLE Syntax”.
-
Use FORCE INDEX for the scanned table to
tell MySQL that table scans are very expensive compared to
using the given index. See Section 13.2.7, “SELECT Syntax”.
SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
WHERE t1.col_name=t2.col_name;
USE INDEX and IGNORE
INDEX may also be useful.
Global and table-level STRAIGHT_JOIN . See
Section 13.2.7, “SELECT Syntax”.
You can tune global or thread-specific system variables. For
example, Start mysqld with the
--max-seeks-for-key=1000 option or use
SET max_seeks_for_key=1000 to tell the
optimizer to assume that no key scan causes more than 1,000
key seeks. See Section 5.2.2, “Server System Variables”.
|
|