top
Loading...
A.6.與優化器有關的事宜
A.6. 與優化器有關的事宜

MySQL采用了基于開銷的優化器,以確定處理查詢的最解方式。在很多情況下,MySQL能夠計算最佳的可能查詢計劃,但在某些情況下,MySQL沒有關于數據的足夠信息,不得不就數據進行“有教養”的估測。

MySQL未能做“正確的”事時,可使用下述工具來幫助MySQL

使用EXPLAIN語句獲取關于MySQL如何處理查詢的信息。要想使用它,可在SELECT語句前添加關鍵字EXPLAIN

mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;

關于EXPLAIN的詳細討論,請參見7.2.1節,“EXPLAIN語法(獲取關于SELECT的信息)”。

使用ANALYZE TABLE tbl_name,為已掃描的表更新鍵分配。請參見13.5.2.1節,“ANALYZE TABLE語法”。

為已掃描的表使用FORCE INDEX,通知MySQL:與使用給定的索引相比,表掃描開銷昂貴。請參見13.2.7節,“SELECT語法”。

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
WHERE t1.col_name=t2.col_name;

USE INDEXIGNORE INDEX也有一定的幫助。

關于全局和表級別的STRAIGHT_JOIN。請參見13.2.7節,“SELECT語法”。

你可以調節全局或線程類系統變量。例如,用“--max-seeks-for-key=1000選項啟動mysqld,或使用“SET max_seeks_for_key=1000”來通知優化器:假定任何表掃描均不會導致1000個以上的鍵搜索。請參見5.3.3節,“服務器系統變量”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/problems.html
北斗有巢氏 有巢氏北斗