2011-03-03 32 views
2

我没有大量的MySQL背景知识,我想知道任何人都可以给我一些关于MySQL查询优化器的信息,以及在确定一个磁盘访问时对磁盘访问成本的影响查询执行的查询计划。 我对磁盘访问时间上收集的任何统计信息是否可以影响查询执行计划中的固定查询集感兴趣。特别是,在同一个数据库映像上运行相同的一组查询时,这些数据库映像位于具有不同性能的不同驱动器上。 (请注意,从MySQL的角度来看,这是相同的数据库;数据目录只是驻留在不同的驱动器上,在“不知道”的情况下,在“MySQL下”切换)。观察磁盘性能的这种变化是否会影响查询优化器在运行时所做的查询计划决策? 我认为在考虑磁盘访问之前,优化器可以执行更多与SQL本身相关的其他事情,但是有些人在处理查询优化器方面比我有更多的经验。MySQL的查询优化器占用磁盘访问时间

感谢您的帮助!

+0

不幸的是我没有源代码,确认它,但我几乎可以肯定,这样的统计资料不会被MySQL聚集。据我记得,在mysqlperformanceblog.com上发布了MySQL优化器对SSD驱动器过时的方法(他们提到随机I/O写入/读取的成本在MySQL源代码中是硬编码的)。 – matt

回答

1

我不知道MySQL中pyhsical I/O访问的优化。 但是,查询优化器会尝试最小化查询执行所需的I/O(例如块的数量)。

内存和辅助I/O系统之间的速度差距如此之大,以至于在内存中保持有效的缓存是大多数关系数据库系统性能的关键问题。

因此,查询计划应该尽可能减少查询计划对查询的要求,尽可能缩短设备的查询时间。

<Query Result> <--[Logical I/O]-- <Main Memory> <--[Physical I/O]-- <Secondary I/O System>

+0

好吧,查询优化器仍然需要很多关于磁盘I/O的假设。至少旧规则“如果似乎超过1/3的行被where子句命中,不使用索引,而是执行全表扫描”是基于“x块连续读取更快比y块随机存取“。我确信查询计划的其他部分也应该有所不同。 – 2011-11-15 08:02:34