MySQL采用了基于開銷的優(yōu)化器,以確定處理查詢的最解方式。在很多情況下,MySQL能夠計(jì)算最佳的可能查詢計(jì)劃,但在某些情況下,MySQL沒有關(guān)于數(shù)據(jù)的足夠信息,不得不就數(shù)據(jù)進(jìn)行“有教養(yǎng)”的估測。
當(dāng)MySQL未能做“正確的”事時(shí),可使用下述工具來幫助MySQL:
使用EXPLAIN語句獲取關(guān)于MySQL如何處理查詢的信息。要想使用它,可在SELECT語句前添加關(guān)鍵字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也有一定的幫助。
你可以調(diào)節(jié)全局或線程類系統(tǒng)變量。例如,用“--max-seeks-for-key=1000”選項(xiàng)啟動mysqld,或使用“SET max_seeks_for_key=1000”來通知優(yōu)化器:假定任何表掃描均不會導(dǎo)致1000個(gè)以上的鍵搜索。
更多信息請查看IT技術(shù)專欄