mysql的explain与profile有什么区别

2025-03-24 14:00:12
推荐回答(1个)
回答(1):

想必大家对index,explain和profile的利用也很多,这是我最近两天优化mysql语句查询资料整理的一些内容,希望大家可以一起来补充一下。
index的使用:
1.最好是在相同类型的字段间进行比较的操作。在MySQL 3.23版之前,这甚至是一个必须的条件。例如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较。
2.在建有索引的字段上尽量不要使用函数进行操作,尽量不要在数据库中做运算。
3.避免负向查询和%前缀模糊查询,like 'xxx%'百分号后缀查询可以在此字段上使用索引。
4.不要在生产环境程序中使用select * from 的形式查询数据。只查询需要使用的列。
5.查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。
6.对查询列使用函数用不到索引。
7.避免隐式类型转换,例如字符型一定要用’’,数字型一定不要使用’’。
8.所有的SQL关键词用大写,养成良好的习惯,避免SQL语句重复编译造成系统资源的浪费。
9.联表查询的时候,记得把小结果集放在前面,遵循小结构及驱动大结果集的原则,这条很重要!
10.开启慢查询,定期用explain优化慢查询中的SQL语句。
11.任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。
12.IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
13.索引不会包含有NULL值的列,只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
14.使用短索引,对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
15.排序的索引问题,mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。