欢迎投稿

今日深度:

利用 force index优化sql语句性能,forcesql

利用 force index优化sql语句性能,forcesql


    今天写了一个统计sql,在一个近亿条数据的表上执行,200s都查不出结果。SQL如下:

select customer,count(1) c
from upv_**
where created between "2015-07-06" and "2015-07-07"
group by customer 
having c > 20
order by c desc

    执行explain,发现这个sql扫描了8000W条记录到磁盘上。然后再进行筛选。


    拿着这个SQL去请教项目组的数据库大牛,仅仅加了一个force index,花了1s多就出结果了。修改后的SQL如下:

select customer,count(1) c
from upv_jd force index(idx_created)
where created between "2015-07-06" and "2015-07-07"
group by customer 
having c > 15
order by c desc 

    同样执行以下explain命令,这个SQL仅仅扫描了磁盘的110W行记录。也就是上一个SQL的80分之一。大家都知道,扫描磁盘是很耗时的IO操作,比内存操作慢几个数量级。


    除了磁盘扫描的行数的不一样,还有采用的索引的不用,上面的sql用的是联合索引,而下面的是单纯的created字段的索引。由于用的是created的索引,驱动条件就是created的区间,需要扫描的数据就立刻变小了,因为时间区间小。

版权声明:本文为博主原创文章,未经博主允许不得转载。

www.htsjk.Com true http://www.htsjk.com/shujukunews/9200.html NewsArticle 利用 force index优化sql语句性能,forcesql 今天写了一个统计sql,在一个近亿条数据的表上执行,200s都查不出结果。SQL如下: select customer,count(1) cfrom upv_**where created between 2015-07-06 and 2015-...
评论暂时关闭