问题描述:数据表中有百万数据,分别属于user 1,user 2,user 3,三个用户数据量相当,为提高查询速度,我在排序的字段上加了索引。查询语句如下
select keywords from search_history where user_id=1 order by update_time limit 10;
问题来了,查询user 1和user 2的时间竟然相差几十倍!
研究过程:刚开始认为是查询字段有空值导致查询没有用索引而是全表扫描,随即我查询了一下的确有空值,但当我将空值记录删除后问题依旧,这让
我百思不得其解。老师提醒我是不是因为外键的原因导致的,我尝试了一下,将user_id 的外键去除,再次查询,奇迹出现了,查询时间提升几十倍。
原因:外键约束用来保证数据的一致性和完整性,但会增加数据库负荷,user 表与多个表有关联,user2 在这些表中均有数据,故其速度很慢。在性能
要求较高,安全性要求次之的系统中(可由程序控制),建议不用外键。
大数据查询的优化:数据结构优化,索引优化,慢查询优化,mysql参数设置优化