查询一张百万数据量的数据库表,已经建立了索引 flowNo。
因为导出日志备份需要,要求根据flowNo的值取出数据。
即,select部分的语句如下:
Select MONTHNO||'|'||FLOWNO||'|'||DIFFERENCEKEY||'|'||INPHONENUM||'|'||USERTYPE||'|'||DISTRICT||'|'||STRORGCALLED||'|'||BEGINTIME||'|'||ENDTIME||'|'||CALLTIME||'|'||QUEUETIMES||'|'||QUEUETIME||'|'||OVERTIMES||'|'||ERRORTIMES||'|'||REFUSETIMES||'|'||NOANSWERTIMES||'|'||APPRAISETIMES||'|'||ENDREASON||'|'||TOPSTAFFNO||'|'||STAFFNO||'|'||QBEGINTIME||'|'||QENDTIME||'|'||APPRAISE||'|'||ACCESSCODE||'|'||SKILLNO||'|'||AREACODE||'|'||FLOWFLAG||'|'||ANSWERTIME from t_log_auto_bak t 对比了以下三种where查询子句的运行速度:
1.
where t.flowno between '2017031400' and '2017031410'查询105412条数据耗时126.031秒
where t.flowno between '2017031400' and '2017031401'查询4222条数据耗时5.438秒
2.
where t.flowno like '201703140%'查询105412条数据耗时124.437秒
where t.flowno like '2017031400%'查询4222条数据耗时5.39秒
3.
where t.flowno >='2017031400' and t.flowno <'2017031410'查询105412条数据耗时124.078秒
where t.flowno >='2017031400' and t.flowno <'2017031401'查询4222条数据耗时4.625秒
从这里来看,使用直接的大小比较的语句查询速度要略快一些。
此外,在select子句中使用的拼接也拖慢了系统查询的速度,这里要考虑一下要如何优化查询
本文探讨了一张包含百万条数据的数据库表的查询效率问题。针对flowNo字段建立了索引,通过比较不同类型的SQL查询语句(如直接大小比较与拼接方式)发现,直接大小比较的查询速度更快。文章提醒在编写select子句时需要注意避免拼接操作以提高系统查询速度,从而进行有效的SQL优化。
491

被折叠的 条评论
为什么被折叠?



