怎么用mysql优化 mysql如何做优化( 四 )


该列完全独立于EXPLAIN输出所示的表的次序 。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用 。
如果该列是NULL,则没有相关的索引 。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能 。如果是这样 , 创造一个适当的索引并且再次用EXPLAIN检查查询
key
key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中
如果没有选择索引,键是NULL 。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX 。
key_len
表示索引中使用的字节数 , 可通过该列计算查询中使用的索引的长度,非实际长度,为最大可能长度 。
注:不损失精确性的情况下 , 长度越短越好 。
ref
列与索引的比较,表示上述表的连接匹配条件 , 即哪些列或常量被用于查找索引列上的值 。
rows
估算出结果集行数 , 表示MySQL根据表统计信息及索引选用情况 , 估算的找到所需的记录所需要读取的行数;
extra
该列包含MySQL解决查询的详细信息,有以下几种情况:
(1).Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
(2).Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
(3).Range checked for each
Record(index map:#)
没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行 。这是使用索引的最慢的连接之一
(4).Using filesort
看到这个的时候,查询就需要优化了 。MYSQL需要进行额外的步骤来发现如何对返回的行排序 。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行;
(5).Using temporary
看到这个的时候,查询需要优化了 。这里 , MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上;
(6).Using index
列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候 。
(7).Using where
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户 。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题 。
MySQL优化之数据类型的使用有助于效率的类型选择
使你的数据尽可能小
最基本的优化之一是使你的数据(和索引)在磁盘上(并且在内存中)占据的空间尽可能小 这能给出巨大的改进 因为磁盘读入较快并且通常也用较少的主存储器 如果在更小的列上做索引 索引也占据较少的资源
你能用下面的技术使表的性能更好并且使存储空间最小
·尽可能地使用最有效(最小)的类型 MySQL有很多节省磁盘空间和内存的专业化类型
·如果可能使表更小 使用较小的整数类型 例如 MEDIUMINT经常比INT好一些
·如果可能 声明列为NOT NULL 它使任何事情更快而且你为每列节省一位 注意如果在你的应用程序中你确实需要NULL 你应该毫无疑问使用它 只是避免缺省地在所有列上有它
使用定长列 不使用可变长列
这条准则对被经常修改 从而容易产生碎片的表来说特别重要 例如 应该选择 CHAR 列而不选择 VARCHAR 列 所要权衡的是使用定长列时 表所占用的空间更多 但如果能够承担这种空间的耗费 使用定长行将比使用可变长的行处理快得多
将列定义为 NOT NULL

推荐阅读