高性能MySQL(第三版)-第六章 1

高性能MySQL(第三版) 是在MySQL5.5的基础上进行讲解的。
研读了第六章 查询性能优化的1-4小节,记录一些知识点。

  • MySQL 的临时表是没有任何索引的
  • 在关联查询时,MySQL 总是从一个表开始,一直嵌套循环
  • 无论如何排序,都是一个成本很高的操作,当不能用索引获得排序结果的时候,就需要MySQL自行排序。当数据量小的时候,在内存中排序,当数据量大的时候,将数据分块存储在磁盘中排序,然后将每块的排序结果归并。不管是内存排序还是磁盘排序都成为文件排序(filesort)
  • 当查询所有列的总长度不超过参数 max_length_for_sort_data 时,MySQL使用“单次传输排序”
  • 关联查询中,有排序和limit时,5.6版本后,使用了limit,不再对所有结果排序,之前是先对所有的结果排序,再使用limit
  • MySQL 在优化阶段为每个表创建一个handle实例
  • EXISTS 子查询
  • 当查询语句很长的时候,可以调整 max_allowed_packet 的值
  • 对于 IN(),MySQL将IN()列表中的数据先进行排序,然后通过微分查找的方式来确定列表中值是否满足条件,这是一个O(log n)复杂度的操作,等价的换成OR查询的复杂度为O(n),对于IN()列表中有大量取值的时候,MySQL的处理速度将会更快。

你可能感兴趣的:(高性能MySQL(第三版)-第六章 1)