我有一個采集表有2200萬資料 經常查詢的是一天內某個設備的信號流水 現在總共有393臺設備 那么我在建立b樹索引時考慮過兩種方案 1.為設備id建索引 2.為時間建立索引 事實結果為時間建立索引 查找資料為30s左右 大約1天4000左右的資料 為設備id建立索引 壓根就查不出來 我想 這就驗證了一個建索引規則 值變化較少的欄位不要建立索引 那么在2200w資料里面 設備id只有393個變化 但是我無法理解為什么值少最好不建立索引 按照我理解的是 按設備id進行篩選完后 只有17w的資料 然后按時間篩選 而按時間篩選完后有100多萬資料 為啥按照時間還快些 有dba大神能從資料結構方面 或者按照此情況解釋索引的作業原理嗎?
uj5u.com熱心網友回復:
你的時間是DATETIME嗎? 每一秒會有100多萬資料?uj5u.com熱心網友回復:
MYSQL在分析陳述句時,未必能用到你想要的索引,特別是ID這樣值少的索引。兩者的陳述句你最好EXPLAIN一下,
MYSQL你可以強制使用某個索引。
uj5u.com熱心網友回復:
建立索引的目的是提高查詢效率,前提條件是索引列具有高選擇性。索引不一定是單例的,也可以多列,來建立組合索引;有時單例的選擇性不高,而多列的選擇性可能會比較高uj5u.com熱心網友回復:
現在的資料庫優化器多是基于CBO的,至于優化器是否選擇索引或全表掃描是依據一套模型來計算出各個執行計劃的Cost,最后優化器選擇出較有的執行計劃uj5u.com熱心網友回復:
通常索引掃描是離散的單塊讀,而全表掃描是多塊讀,若是讀取的資料比較多,計算的結果很大的可能是全表掃描消耗的IO更少uj5u.com熱心網友回復:
通過時間先篩選 篩選完就是一天的393臺設備的資料100多萬uj5u.com熱心網友回復:
explain分析了 中了我想要的索引轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/88029.html
標籤:MySQL
上一篇:根據一個相同欄位、時間提取另一表時間早于此時間最大的一條記錄
下一篇:MGR+win框架搭建
