1

我从一篇“执行计划”文章中看到了一些东西:

10 rows fetched in 0.0003s (0.7344s)

(链接:http ://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ )

为什么显示 2 个持续时间?如果我还没有大数据集怎么办。例如,如果我只有 20 条、50 条,甚至只有 100 条记录,我无法真正衡量 2 条不同的 SQL 语句在现实生活中的速度相比有多快?换句话说,至少需要几十万条记录,甚至上百万条记录,才能准确比较这两条不同 SQL 语句的性能?

4

3 回答 3

1

测试和比较操作性能的最佳方法通常是(如果不是总是!)使用一组真实的数据。

如果您计划在应用程序投入生产时拥有数百万行,那么您现在应该测试数百万行,而不仅仅是十几个!


几个提示:

  • 在进行基准测试时,使用select SQL_NO_CACHE ..., 而不是select ...
    • 这将阻止 MySQL 使用它的查询缓存(这会使第一个查询花费正常的时间,并且重新执行几次会更快)
  • 学习如何使用EXPLAIN,并了解它的输出
  • 阅读手册的第 7 章优化部分;-)
于 2010-04-24T16:09:38.243 回答
1

对于你的第一个问题:

在 Y s (Z s) 中取出 X 行

X = 行数(当然);Y = MySQL 服务器执行查询(解析、检索、发送)所花费的时间;Z = 结果集从服务器传输到客户端所花费的时间;

(来源: http://forums.mysql.com/read.php?108,51989,210628#msg- 210628

对于第二个问题,除非您使用实际数量的记录进行测试,否则您永远不会知道查询的执行情况。这是如何正确进行基准测试的一个很好的例子:http ://www.mysqlperformanceblog.com/2010/04/21/mysql-5-5-4-in-tpcc-like-workload/

总的来说,该博客以及“高性能 MySQL ”一书是一座金矿。

于 2010-04-24T16:18:34.943 回答
0

通常显示 2 个时间时,一个是 CPU 时间,一个是挂钟时间。我不记得哪个是哪个,但似乎第一个是 CPU 时间,第二个是经过的时间。

于 2010-04-24T16:09:20.420 回答