mysql真的很简单,查询花了很长时间

时间:2013-12-02 10:51:40

标签: php mysql laravel-4 mysql-5.6

我从慢查询日志中提供样本。

mysql版本:5.6.14, 8GB服务器6gb可用内存, innodb表

例如:当我在phpmyadmin中输入此查询时,id是主键非常快但它仍在我的慢查询日志中

# Query_time: 3.226675  Lock_time: 0.000046 Rows_sent: 0  Rows_examined: 1
SET timestamp=1385980918;
update `rsslists` set `lastTimeRead` = '1385980913', `total` = '66502', `quality` =      '0.028284863613124' where `id` = '146';

或此查询:

 # Query_time: 2.284815  Lock_time: 0.000047 Rows_sent: 0  Rows_examined: 0
 SET timestamp=1385980935;
 select * from `articles` where `guid` = '1.2180130' limit 1;

解释: explain

'guid'是索引 非常简单的查询我不知道为什么他们有时会花这么长时间

2 个答案:

答案 0 :(得分:1)

按照以下要点优化查询。

  1. 优化查询缓存的查询
  2. 解析您的SELECT查询
  3. 限制1获取独特行时
  4. 索引搜索字段
  5. 为联接编制索引并使用相同的列类型
  6. 不按RAND()
  7. 订购
  8. 避免SELECT *
  9. 几乎总是有一个id字段
  10. 使用ENUM over VARCHAR
  11. 使用PROCEDURE ANALYZE()
  12. 获取建议
  13. 如果可以
  14. 使用NOT NULL
  15. 准备好的陈述
  16. 无缓冲查询
  17. 将IP地址存储为UNSIGNED INT
  18. 固定长度(静态)表格更快
  19. 垂直分区
  20. 拆分Big DELETE或INSERT查询
  21. 较小的列更快
  22. 选择正确的存储引擎
  23. 使用对象关系映射器
  24. 小心持续连接
  25. 有关详细信息,请参阅this

答案 1 :(得分:0)

如果这些表很大并且有多个索引,则插入可能非常慢。 您应该记录所有查询并查看其他插入的执行情况。

至于select,guid上应该有一个索引,否则如果它是一个大表,它会很慢。