在选择索引时需要注意:
1.单行访问是很慢的.如果服务器从存储中读取一个数据块只是为了获取其中一行,那么就浪费了很多工作.最好读取的块中能包含尽可能多所需要的行.使用索引可以创建位置引用以提升效率
2.按顺序访问范围数据是很快的,如果服务器能够按需要顺序读取数据,那么就不再需要额外的排序操作,所以说经常需要排序的表可以考虑在插入时做好排序,以提升查询速度,这样GROUP BY查询也无须再做排序和将行按组进行聚合计算了
3.索引覆盖查询是很快的,如果一个索引包含了查询需要的所有列,那么存储引擎就不需要再回表查找行.这避免了大量的单行访问.
总的来说就是,编写查询语句时应该尽可能选择合适的索引以避免单行查找,尽可能地使用数据原生顺序从而避免额外的排序操作,并尽可能使用索引覆盖查询.
一般来说,建议按响应时间来对查询进行分析.找出那些消耗最长时间的查询或者那些给服务器带来最大压力的查询,然后检查这些查询的schema,sql,和索引结构,判断是否有查询扫描了太多的行,是否做了很多额外的排序或者使用了临时表,是否使用随机I/O访问数据,或者是否有太多回表查询那些不在索引的列的操作
1.单行访问是很慢的.如果服务器从存储中读取一个数据块只是为了获取其中一行,那么就浪费了很多工作.最好读取的块中能包含尽可能多所需要的行.使用索引可以创建位置引用以提升效率
2.按顺序访问范围数据是很快的,如果服务器能够按需要顺序读取数据,那么就不再需要额外的排序操作,所以说经常需要排序的表可以考虑在插入时做好排序,以提升查询速度,这样GROUP BY查询也无须再做排序和将行按组进行聚合计算了
3.索引覆盖查询是很快的,如果一个索引包含了查询需要的所有列,那么存储引擎就不需要再回表查找行.这避免了大量的单行访问.
总的来说就是,编写查询语句时应该尽可能选择合适的索引以避免单行查找,尽可能地使用数据原生顺序从而避免额外的排序操作,并尽可能使用索引覆盖查询.
一般来说,建议按响应时间来对查询进行分析.找出那些消耗最长时间的查询或者那些给服务器带来最大压力的查询,然后检查这些查询的schema,sql,和索引结构,判断是否有查询扫描了太多的行,是否做了很多额外的排序或者使用了临时表,是否使用随机I/O访问数据,或者是否有太多回表查询那些不在索引的列的操作