MySQL 8.4 發行說明
MySQL 使用基於成本的最佳化器來決定解決查詢的最佳方法。在許多情況下,MySQL 可以計算出最佳的查詢計畫,但有時 MySQL 沒有足夠的資料資訊,必須對資料進行 「有根據的」 猜測。
對於 MySQL 沒有做「正確」事情的情況,您可以使用以下工具來幫助 MySQL:
使用
EXPLAIN
陳述式取得 MySQL 如何處理查詢的資訊。要使用它,只需在SELECT
陳述式的前面加上關鍵字EXPLAIN
即可。mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN
在 第 15.8.2 節,「EXPLAIN 陳述式」中有更詳細的討論。使用
ANALYZE TABLE
來更新掃描表格的索引鍵分佈。請參閱第 15.7.3.1 節,「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
也可能很有用。請參閱 第 10.9.4 節,「索引提示」。全域和表格層級的
STRAIGHT_JOIN
。請參閱 第 15.2.13 節,「SELECT 陳述式」。您可以調整全域或執行緒特定的系統變數。例如,使用
--max-seeks-for-key=1000
選項啟動 mysqld,或使用SET max_seeks_for_key=1000
來告訴最佳化器假設沒有索引鍵掃描會導致超過 1,000 次索引鍵搜尋。請參閱 第 7.1.8 節,「伺服器系統變數」。