最好使用哪种SQL

时间:2015-11-09 05:45:55

标签: mysql sql performance

我有一个拥有大约6000万条记录的mysql数据库。我必须每天生成报告。

我有两种类型的sql语句。

方法1

SELECT TransferStatus as Transfer_Status, count(ID) as Count 
FROM calldetails 
WHERE YEAR(IVRStartTime) = '2015' AND MONTH(IVRStartTime) = '11' AND DAy(IVRStartTime)='05' AND CallTransfer LIKE '163%' 
GROUP BY TransferStatus;

方法2

SELECT TransferStatus as Transfer_Status,  
count(ID) as Count FROM  calldetails 
WHERE  (IVRStartTime BETWEEN '2015-11-05 00.00.00' AND '2015-11-05 23.59.59') 
AND CallTransfer LIKE '163%'  
GROUP BY TransferStatus

我尝试了两个查询都需要大约15分钟才能得出结果。我的问题是哪一个最好用,有没有其他方法可以改善性能。

2 个答案:

答案 0 :(得分:3)

只需使用DATE函数返回日期时间值的日期部分

SELECT TransferStatus as Transfer_Status,  
count(ID) as Count FROM  calldetails 
WHERE  DATE(IVRStartTime) = DATE('2015-11-05') 
AND CallTransfer LIKE '163%'  
GROUP BY TransferStatus

这对于处理日期条件会更有效。

您需要使用EXPLAIN来查看执行计划是什么,以便您可以使用索引对其进行优化以加快查询速度

答案 1 :(得分:2)

使用BETWEEN最佳方法

SELECT TransferStatus as Transfer_Status,  
count(ID) as Count FROM  calldetails 
WHERE  (IVRStartTime BETWEEN '2015-11-05 00.00.00' AND '2015-11-05 23.59.59') 
AND CallTransfer LIKE '163%'  
GROUP BY TransferStatus

这个是最好的,因为BETWEEN比较多个where子句

执行速度快

或使用index始终是一个好习惯,因为: -

数据库indeximproves表中speed个操作的数据结构。可以使用一列或多列创建索引,为快速随机查找和efficient ordering访问记录提供基础。