Spec-Zone .ru
спецификации, руководства, описания, API
|
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 does not 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 13.8.2, "EXPLAIN
Syntax".
Use ANALYZE TABLE
to update the key distributions for the
scanned table. See Section 13.7.2.1, "tbl_name
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:
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. See Section
13.2.9.3, "Index Hint Syntax".
Global and table-level STRAIGHT_JOIN
. See Section 13.2.9, "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.1.4, "Server System Variables".