我有一个工作正常的查询:
SELECT
month_date= month(SendTime) ,year_date =year(sendtime) ,MessageType
,COUNT(MessageType) AS MESSAGE_COUNT
FROM Message
WHERE year(SendTime)= 2014
and messagetype NOT LIKE '%test%'
and messagetype NOT LIKE '%ANOTHER THING%'
and messagetype NOT LIKE '%STUFF%'
GROUP BY month(SendTime),year(sendtime), MessageType
Run Code Online (Sandbox Code Playgroud)
我注意到的是LIKE
有条件它使流逝时间变慢。
使用上面的查询,它在经过时间 0.550 运行,没有它们 0.154。
有没有其他方法可以缩短这次时间并使查询更快?
没有消息类型不是索引,我不允许更改它。
你可以做两件事:
使用SendTime >= '20140101' AND SendTime < '20150101'
而不是year(SendTime)= 2014
. 这使得条件可以使用并且可以使用索引。
添加复合索引,(SendTime, MessageType)
以便查询不必执行全表扫描,而只需执行(部分)索引扫描。
查询重写:
SELECT
month_date = month(SendTime),
year_date = year(SendTime),
MessageType,
message_count = COUNT(MessageType)
FROM Message
WHERE SendTime >= '20140101' AND SendTime < '20150101'
AND MessageType NOT LIKE '%test%'
AND MessageType NOT LIKE '%ANOTHER THING%'
AND messagetype NOT LIKE '%STUFF%'
GROUP BY year(SendTime), month(SendTime), MessageType ;
Run Code Online (Sandbox Code Playgroud)
另一种选择是在year(SendTime)
和month(SendTime)
和索引上添加计算列year(SendTime), month(SendTime), MessageType
- 并保留原始查询!
归档时间: |
|
查看次数: |
75 次 |
最近记录: |