Mysql
MySQL 執行計劃是否依賴於可用索引?
MySQL 是在考慮哪些索引可用的情況下為給定查詢選擇執行計劃,還是首先選擇一個執行計劃,然後在索引可用時使用它們?
*動機:*我想決定哪些索引有用。我有一些典型的查詢。所以我可以想像兩種可能的策略:
- 如果計劃不依賴於可用索引:查看這些查詢的執行計劃並添加對這些計劃有用的索引,或者
- 如果計劃依賴於可用索引:添加所有可能的索引(很多!),查看查詢計劃,並刪除未使用的索引。
我的數據庫不是很大,所以我可以負擔得起使用索引。我目前使用 InnoDB,但如果需要,我可以切換到 MyISAM 或其他。
MySQL 的優化器只查看可用的索引。
5.6 有一個例外:如果你有一個子查詢如
FROM ( SELECT ... ) JOIN ( SELECT ... ) ...
,則創建的臨時表上沒有索引。這曾經導致糟糕的表現。現在,優化器將嘗試各種索引,並為 tmp 表創建最好的索引。我懷疑它只查找單列索引,而不是“複合”索引InnoDB 這些天來最受關注。MyISAM 沒有任何技巧。
在給定 SELECT 的情況下,試試我的Cookbook 以創建最佳索引。它可能會為您節省一些錯誤的開始。