MySQL采用了基於開銷的優化器,以確定處理查詢的最解方式。在很多情況下,MySQL能夠計算最佳的可能查詢計劃,但在某些情況下,MySQL沒有關於數據的足夠信息,不得不就數據進行“有教養”的估測。
當MySQL未能做“正確的”事時,可使用下述工具來幫助MySQL:
使用EXPLAIN語句獲取關於MySQL如何處理查詢的信息。要想使用它,可在SELECT語句前添加關鍵字EXPLAIN:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
使用ANALYZE TABLE tbl_name,為已掃描的表更新鍵分配。
為已掃描的表使用FORCE INDEX,通知MySQL:與使用給定的索引相比,表掃描開銷昂貴。
SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
WHERE t1.col_name=t2.col_name;
USE INDEX和IGNORE INDEX也有一定的幫助。
你可以調節全局或線程類系統變量。例如,用“--max-seeks-for-key=1000”選項啟動mysqld,或使用“SET max_seeks_for_key=1000”來通知優化器:假定任何表掃描均不會導致1000個以上的鍵搜索。