技术开发 频道

MySQL优化总结

  剩下的问题是,默认情况,MySQL假设在tt.ActualPC列的值是均匀分布的,并且对tt表不是这样。幸好,很容易告诉MySQL来分析关键字分布:

  mysql> ANALYZE TABLE tt;

  现在联接是“完美”的了,而且EXPLAIN产生这个结果:

  table type possible_keys key key_len ref rows Extra

  tt ALL AssignedPC NULL NULL NULL 3872 Using

  ClientID, where

  ActualPC

  et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1

  et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1

  do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1

  注意在从EXPLAIN输出的rows列是一个来自MySQL联接优化器的“教育猜测”。你应该检查数字是否接近事实。如果不是,可以通过在SELECT语句里面使用STRAIGHT_JOIN并且试着在FROM子句以不同的次序列出表,可能得到更好的性能。

  我们需要特别注意的是key、Extra字段。Key字段显示用了哪个索引,注意看是不是用了索引,如果用了是不是效率最高的。Extra字段会说明是否用了临时表,是否用了基于磁盘的临时表,是否用了文件排序,是否用了全索引扫描,where是有数据库engine产生的还是由数据库server限制的。

1
相关文章