表里資料有200W條,已為code欄位加了索引,查詢速度在40秒以上,很慢,是單表查詢,希望大神給指導一下
select
count(*)
from table1
where substring(code,3,6) NOT in ('120060')
and substring(code,3,3) not in ('060')
and time between '2020-01-01 00:00:00' and '2020-03-01 00:00:00'
uj5u.com熱心網友回復:
篩選欄位上加函式已經用不上索引了,如果查詢條件不能修改的話,只能考慮在時間上想辦法,比如在time欄位上加索引并減小時間范圍多次查詢.
uj5u.com熱心網友回復:
substring(code,3,6) NOT in ('120060') ,code是傳進來的引數嗎?是的話,截取操作放在代碼層處理,code加上索引,另外 in 里面只有一個值的話,用等號吧,time加上索引uj5u.com熱心網友回復:
給table1冗余substring(code,3,6)和substring(code,3,3)兩個欄位,并給這兩個欄位加索引。然后我忘記not in走不走索引了,你可以先試試uj5u.com熱心網友回復:
substring 和not in 已經決定了你無法使用已經創建的Code 索引以下方案可迅速提高查詢效率
給表增加冗余欄位:Code1(用來存盤substring(code,3,6) )和 Code2(用來存盤 substring(code,3,3))
給Code1和Code2 創建索引
在查詢時直接使用Code1和Code2來比較
將Not In('060')和NOT in ('120060')換在 Code2 <> '060' 和Code1 <> '120060'
當然,也可以將Code1和Code2存盤substring(code,3,6) 和substring(code,3,3)的crc32值,來比較crc32的值
uj5u.com熱心網友回復:
有沒有試試我說的方法呢?應該是有效果的轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/13344.html
標籤:MySQL
上一篇:查詢出的多條記錄合成一條記錄
下一篇:根據欄位合并相鄰行
