您的位置:首页 > 数据库

SQL 百万级别记录优化之 -- where 字段加索引

2016-08-15 00:00 155 查看
摘要: 无论是oracle 还是 mysql,面临百万以上级别的数据,性能优化都是至关重要的,用的好了,同样一个查询结果,可能毫秒级,用的不好,可能几十秒。。。

update TIMAGEDATA_TD set ASSIGNTOSERVERID = 1 where IMAGEFILEID in (
select IMAGEFILEID from TIMAGEREG_TD where UPLOADDATAFILEID = 187636
);

TIMAGEDATA_TD 是一个百万以上级别的大表(实际上达到了千万级别)
TIMAGEREG_TD  是一个相对来说小数量级的表,大概十万级别,且存在删除记录的业务逻辑

在索引优化之前,查询到的结果如下:





可以看到这里 千万左右的记录已经达到了 可怕的23 秒,因为sql 中是比较简单的,
没有过多的表间,字段间关联,所以不涉及到不该有的性能下降点,因此根据经验23秒相当非常态!!!

因为这里sql很简单,第一点就想到了是索引的问题,然后问过同事之后,
果然这个是由于新业务改造新加入的字段,不出所料,一查果然没有索引,所以只好加上索引 :
CREATE INDEX TIMAGEDATA_TD_IMAGEFILEID ON TIMAGEDATA_TD (IMAGEFILEID ASC)

附上加上索引后的查询结果:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息