如果我試圖增加使用特定表中4個不同列的查詢的性能,我應該創建4個不同的索引(每個索引單獨一個),還是應該創建1個索引以及所有列包括在內呢?MySql二級索引
回答
具有所有4個值的一個索引是我的經驗最快的。如果您使用某個地方,請嘗試將這些列放置在一個順序中,以使其對該地點有用。
具有所有四列的索引;在WHERE中使用的列應該首先出現,而那些爲你做==比較的列應該首先出現。
有時,優先考慮整數列可以獲得更好的結果;因人而異。
因此,例如,
SELECT title, count(*) FROM table WHERE class = 'post' AND topic_id = 17
AND date > @@BeginDate and date < @@EndDate;
會對指數:topic_id,張貼,日期和標題,在這個秩序。
僅使用索引中的「標題」,以便DB可以爲匹配查詢的記錄找到「標題」的值,而不額外訪問數據表。
第一個字段的記錄分佈越平衡,你會得到最好的結果(在這個例子中,假設10%的行有topic_id = 17,那麼你將丟棄其他90%,而不需要用'post'運行字符串比較 - 不是字符串比較特別昂貴。根據數據的不同,您可能會發現最好先指定日期並稍後發佈,或者甚至先使用日期作爲MySQL PARTITION。
然後再次,有多少個查詢?您應計算查詢成本乘以該查詢的訪問次數;請記住,索引維護會增加總體成本(例如INSERT和UPDATE會運行得慢一點)。 – LSerni 2012-07-10 19:34:53
單索引通常比索引合併更有效,所以如果你有像f1 = 1 AND f2 = 2 AND f3 = 3 AND f4 = 4
這樣的條件,單索引會正確決定。
爲了獲得最好的性能枚舉索引f以基數降序排列(不同值的數量),這將有助於減少分析的行數。
小於4個字段的索引可能更有效,因爲它需要更少的內存。
http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/
- 1. Cassandra二級索引
- 2. Aerospike二級索引查詢
- 3. 是否已棄用cassandra的二級索引功能?與二級索引分頁
- 4. DynamoDBMapper - DynamoDBDocument和本地二級索引
- 5. Mnesia,選擇和二級索引
- 6. InvalidQueryException儘管有二級索引?
- 7. 有關Cassandra二級索引的文檔?
- 8. Cloudant二級索引查詢include_docs
- 9. 低基數列的二級索引cassandra
- 10. 全局二級索引對象屬性
- 11. Cassandra在RandomPartitioner下的二級索引
- 12. Cassandra 1.1.2創建二級索引失敗
- 13. ORDER BY在Cassandra中的二級索引
- 14. AWS Lambda查詢二級索引
- 15. 組合鍵上的Cassandra二級索引?
- 16. 二級索引更新問題
- 17. Cassandra範圍查詢:二級索引vs未索引Colum
- 18. 索引在Dynamo DB中的本地二級索引
- 19. 重新索引第二級多級數據幀
- 20. 使用低級java API查詢dynamoDB的本地二級索引
- 21. Riak二級索引搜索沒有返回鍵每次
- 22. 如何搜索Cassandra中的二級索引而不平等?
- 23. 搜索索引 - 12 =十二
- 24. Xamarin.Forms-x:引用第二級
- 25. 的MySQL索引
- 26. pandas中的數據框中的兩級索引:計數每個第一級索引的第二級索引的數量
- 27. HBase 0.92是否支持協處理器二級索引?
- 28. Spark SQL是否使用Cassandra二級索引?
- 29. 在Riak中獲取具有相似二級索引的對象?
- 30. UpdateItemRequest - 使用本地二級索引更新多個項目
你應該嘗試每個想法,你能拿出和前後比較性能,然後使用一個,讓所有使用情況最好的整體表現上升。 – mellamokb 2012-07-10 19:22:44
我不介意嘗試每一個......主要的問題是創建這些索引可能需要每個8-10小時,這個問題可以解決得越快越好。如果沒有人有任何具體的理由去做這一個或另一個,這將是我的方法 – Miles 2012-07-10 19:23:35
把你的數據的一個子集,轉儲到sqlfiddle,至少你可以看看執行計劃,而不需要8-10小時。 – 2012-07-10 19:24:50