【问题标题】:Is there any way to check the performance of mysql Indexing有没有办法检查mysql索引的性能
【发布时间】:2012-07-20 11:15:50
【问题描述】:

我已经为我的表分配了索引。有什么方法可以确定我的查询的性能吗?谢谢

编辑

我在这里附上我的测试服务器解释结果。在测试服务器中只有几行,但在实时服务器中有大量记录,执行查询需要 10 到 15 分钟。 如果它在这里不可见,我会给出这张图片的网址

http://i45.tinypic.com/n6t8cx.jpg

【问题讨论】:

  • 你的身份是什么意思?你想知道它改进了多少吗?金额还是百分比?
  • 我确信有很多关于 mysql 性能监控和调优的文档(PERFORMANCE_SCHEMA、EXPLAIN 等)。你试过什么?
  • @kommradHomer 因为我的项目正在使用索引,但对于某些查询,执行时间超过 10 分钟。它有许多连接查询和大量记录。所以我想知道我的查询出了什么问题

标签: php mysql database


【解决方案1】:

以下查询将告诉您查询是否使用索引:

EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) 
FROM table_name 
WHERE col1 = val 
GROUP BY col1 
ORDER BY col2;

SHOW WARNINGS;

您可以添加覆盖索引以获得最佳性能。

对于覆盖索引,您首先添加在 where 子句中使用的列,然后添加在 group 中使用的列,然后是在 order by 中使用的列,然后是在 select 中使用的列。

例如对于上述查询,您可以添加覆盖索引KEY(col1, col2, col3)

*注意添加更多索引会减慢插入查询。

【讨论】:

  • possible_keys 和键显示我已分配的索引。所以这意味着它使用索引。是否会出现分配的索引无效的情况?有什么方法可以识别吗?
  • 因为我的项目正在使用索引,但对于某些查询,执行时间超过 10 分钟。它有许多连接查询和大量记录
  • key 显示它使用哪个索引,rows 表示它扫描的行数,如果 Extra 显示 Using where,Using Index 然后是最快的
  • 尝试对需要时间的查询进行解释。还在 join where group by order by 和 select 子句中使用的列上添加复合覆盖索引。注意:添加索引会减慢插入操作
  • @user007,为什么不在您的问题中显示您的 EXPLAIN 结果?如果设置了键列并且Using where 在额外的列中,则它正在使用索引,但是,这并不意味着它正在使用最佳索引。 Using index 表示该索引也用于检索数据(覆盖索引)。
【解决方案2】:

也许您可以打开慢查询日志,这可能会提供更多信息。阅读本文了解更多信息: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2015-10-06
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-05-31
    相关资源
    最近更新 更多