MySQL第一次查询很慢?

问题描述

有个user表,里头有

uid
regdate //注册日期
reg_package //注册包
reg_channel //注册渠道
...

现在我有一条SQL查询用户数据

SELECT * FROM `user` ORDER BY `regdate` DESC  LIMIT 0,50;

这个表上有个多列的索引,idx_regdate_reg_package_reg_channel(key_len有202)
这条SQL也用了这个索引了(用了EXPLAIN看了)

问题

这条语句第一次执行的时候,查询速度特别慢,之后的就会快很多,这里让我很不解
PS:我知道InnoDB索引是要用到缓冲,难不成跟缓冲有关系?

阅读 7.3k
3 个回答

慢的原因不在于这条语句,弄错了,我排查了下,是select COUNT (*) FROM user这条语句慢的缘故

数据库有很多缓存, sql 语句解析缓存, 查询结果缓存,索引缓存,你说的第一次慢,之后快, 很可能是查询结果缓存. 你可以试试第二次查询时改变一下参数:

如第一次

SELECT * FROM `user` ORDER BY `regdate` DESC LIMIT 0,50;

第二次

SELECT * FROM `user` ORDER BY `regdate` DESC LIMIT 5,55;

看看是不是也慢 ?

如果数据量很大,请不要用select *,建议用 select field

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题