MySQL的四种不同查询的分析

发表于:2012-3-01 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:inter12    来源:51Testing软件测试网采编

分享:

  全表扫描总共话了0.0017730秒

  各个阶段消耗的时间是:

  1. mysql> show profile for query 54;  
  2. +--------------------------------+----------+  
  3. | Status                         | Duration |  
  4. +--------------------------------+----------+  
  5. | starting                       | 0.000065 |  
  6. | checking query cache for query | 0.000073 |  
  7. | Opening tables                 | 0.000037 |  
  8. | System lock                    | 0.000024 |  
  9. | Table lock                     | 0.000053 |  
  10. | init                           | 0.000044 |  
  11. | optimizing                     | 0.000022 |  
  12. | statistics                     | 0.000032 |  
  13. | preparing                      | 0.000030 |  
  14. | executing                      | 0.000020 |  
  15. | Sending data                   | 0.001074 |  
  16. | end                            | 0.000091 |  
  17. | query end                      | 0.000020 |  
  18. | freeing items                  | 0.000103 |  
  19. | storing result in query cache  | 0.000046 |  
  20. | logging slow query             | 0.000019 |  
  21. | cleaning up                    | 0.000020 |  
  22. +--------------------------------+----------+  
  23. 17 rows in set (0.00 sec)

  第一次不走缓存的话,需要检查是否存在缓存中,打开表,初始化等操作,最大的开销在于返回数据。

  第二步:根据主键查询数据。

  1. mysql> select name ,gender from person4pri where id in (1,2);  
  2. +----------+--------+  
  3. | name     | gender |  
  4. +----------+--------+  
  5. | zhaoming | male   |  
  6. | wenwen   | female |  
  7. +----------+--------+  
  8. 2 rows in set (0.01 sec)

  查看其执行计划:

  1. mysql> explain select name ,gender from person4pri where id in (1,2);  
  2. +----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+  
  3. | id | select_type | table      | type  | possible_keys | key     | key_len | ref  | rows | Extra       |  
  4. +----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+  
  5. |  1 | SIMPLE      | person4pri | range | PRIMARY       | PRIMARY | 4       | NULL |    2 | Using where |  
  6. +----+-------------+------------+-------+---------------+---------+---------+------+------+-------------+  
  7. 1 row in set (0.00 sec)

  从执行计划中我们可以看出,走的是范围索引。

  再看其执行消耗的时间:

  1. mysql> show profiles;  
  2. +----------+------------+-----------------------------------------------------------------------------------------------------------------------------------+  
  3. | Query_ID | Duration   | Query                                                                                                                             |  
  4. +----------+------------+-----------------------------------------------------------------------------------------------------------------------------------+  
  5. |       63 | 0.00135700 | select name ,gender from person4pri where id in (1,2)                                                                             |  
  6. |       64 | 0.00079200 | explain select name ,gender from person4pri where id in (1,2)                                                                     |  
  7. +----------+------------+-----------------------------------------------------------------------------------------------------------------------------------+  
  8. 15 rows in set (0.01 sec)

  这次查询消耗时间为0.00079200。

  查看各个阶段消耗的时间:

  1. mysql> show profile for query 63;  
  2. +--------------------------------+----------+  
  3. | Status                         | Duration |  
  4. +--------------------------------+----------+  
  5. | starting                       | 0.000067 |  
  6. | checking query cache for query | 0.000146 |  
  7. | Opening tables                 | 0.000342 |  
  8. | System lock                    | 0.000027 |  
  9. | Table lock                     | 0.000115 |  
  10. | init                           | 0.000056 |  
  11. | optimizing                     | 0.000032 |  
  12. | statistics                     | 0.000069 |  
  13. | preparing                      | 0.000039 |  
  14. | executing                      | 0.000022 |  
  15. | Sending data                   | 0.000100 |  
  16. | end                            | 0.000075 |  
  17. | query end                      | 0.000022 |  
  18. | freeing items                  | 0.000158 |  
  19. | storing result in query cache  | 0.000045 |  
  20. | logging slow query             | 0.000019 |  
  21. | cleaning up                    | 0.000023 |  
  22. +--------------------------------+----------+  
  23. 17 rows in set (0.00 sec)

  看出最大的消耗也是在Sending data,第一次也是需要一些初始化操作。

42/4<1234>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号