Mysql

MySQL 執行計劃是否依賴於可用索引?

  • March 21, 2015

MySQL 是在考慮哪些索引可用的情況下為給定查詢選擇執行計劃,還是首先選擇一個執行計劃,然後在索引可用時使用它們?

*動機:*我想決定哪些索引有用。我有一些典型的查詢。所以我可以想像兩種可能的策略:

  • 如果計劃不依賴於可用索引:查看這些查詢的執行計劃並添加對這些計劃有用的索引,或者
  • 如果計劃依賴於可用索引:添加所有可能的索引(很多!),查看查詢計劃,並刪除未使用的索引。

我的數據庫不是很大,所以我可以負擔得起使用索引。我目前使用 InnoDB,但如果需要,我可以切換到 MyISAM 或其他。

MySQL 的優化器只查看可用的索引。

5.6 有一個例外:如果你有一個子查詢如 FROM ( SELECT ... ) JOIN ( SELECT ... ) ...,則創建的臨時表上沒有索引。這曾經導致糟糕的表現。現在,優化器將嘗試各種索引,並為 tmp 表創建最好的索引。我懷疑它只查找單列索引,而不是“複合”索引

InnoDB 這些天來最受關注。MyISAM 沒有任何技巧。

在給定 SELECT 的情況下,試試我的Cookbook 以創建最佳索引。它可能會為您節省一些錯誤的開始。

引用自:https://dba.stackexchange.com/questions/95854