我目前有一個摘要表來跟蹤我的用戶的帖子數,並且我在該表上運行SELECTs按照計數對它們進行排序,例如WHERE count > 10
。現在我知道在WHERE子句中使用的列的索引可以加快速度,但由於這些字段也會經常更新,索引會提供更好還是更差的性能?此字段是否需要索引?
0
A
回答
1
如果你有一個像
SELECT count(*) as rowcount
FROM table1
GROUP BY name
查詢,那麼你不能把一個指標的數量,你需要把指數在group by
場來代替。
如果你有一個名爲count
然後把指數在此查詢可以加快查詢字段,也可能沒有什麼區別可言:對count
SELECT id, `count`
FROM table1
WHERE `count` > 10
是否指數會加快查詢的速度實際上取決於行數滿足where
條款的百分比。如果它超過30%,MySQL (或任何有關此事的SQL)將拒絕使用索引。
它會固執地堅持做一個全表掃描。 (即讀取所有行)
這是因爲使用索引需要讀取2個文件(1個索引文件,然後是實際數據的真實表文件)。
如果選擇很大比例的行,讀取額外的索引文件是不值得的,只是按順序讀取所有行會更快。
如果只有幾行通集,使用索引將加快這一查詢很多
瞭解你的數據
使用explain select
會告訴你哪些索引MySQL有可用的和一個它挑選並且(某種/以某種複雜的方式)爲什麼。
0
索引通常以較差的插入,更新和刪除性能爲代價提供更好的讀取性能。根據索引的寬度和表中已經存在的索引的數量,折衷通常是值得的。在你的情況下,我敢打賭,整體表現(閱讀和寫作)與索引相比仍然會更好,但是你需要運行測試來確定。
0
它會提高讀取性能並降低寫入性能。如果表格是MyISAM,並且很多人在短時間內發佈信息,則可能會遇到MySQL正在等待鎖定的問題,最終導致崩潰。
0
沒有嘗試它,沒有辦法真正知道。很大程度上取決於讀取與寫入的比率,存儲引擎,磁盤吞吐量,各種MySQL調整參數等。您必須設置類似於生產並在之前和之後運行的仿真。
0
我認爲在添加索引之後寫入性能不太可能是一個嚴重的問題。
但是請注意,如果索引不夠選擇,那麼索引將不會被使用 - 如果超過例如10%的用戶擁有count > 10
最快的查詢計劃可能不使用索引,只是掃描整個表。
相關問題
- 1. 此處是否需要「父」的索引?
- 2. 兩個字段表(都是int)是否需要一個索引?
- 3. 是否需要在經緯度字段中添加索引
- 4. 在elasticsearch中是否需要布爾型字段索引
- 5. 分類字段是否需要索引? (MySQL或MongoDB)
- 6. 使用BinaryObject時,我是否需要每個字段的索引?
- 7. 我是否需要此字段是易變的?
- 8. 我需要索引哪些字段?
- 9. 使用DSE搜索時,是否需要重新索引以刪除字段
- 10. 表(字符串,字符串)是否需要索引?
- 11. 是否添加新字段到Solr與真實只需要重建索引?
- 12. 必填字段是否需要遷移?
- 13. 是否需要任何SiteCatalyst字段?
- 14. 是否需要<select>字段?
- 15. postgreSQL索引是否有多值字段?
- 16. MongoDB索引是否存在字段?
- 17. 有數字的數據庫列是否需要編制索引?
- 18. 是否需要重建我的lucene索引以進行此更改?
- 19. 爲了在Oracle視圖中搜索,是否需要索引列?
- 20. Mongodb - 創建索引 - 是否需要,我搜索好嗎?
- 21. 我是否需要在此框?
- 22. 我是否需要刪除此對象?
- 23. MySQL是否需要此代碼?
- 24. 此表是否需要新的主鍵?
- 25. 是否需要在此處使用#import?
- 26. 此代碼中是否需要MemoryBarrier?
- 27. 我是否需要釋放此對象?
- 28. 我是否需要爲此實現一個b-tree搜索?
- 29. 我是否需要GROUP BY中的此字段不顯示重複行
- 30. 在MongoDB中,需要選擇哪些字段來構建索引?
廣義:具有上在所使用的列的索引WHERE子句將提供更快的讀取性能。唯一擔心的是額外寫入索引。懷疑這不會是一個問題。 –