1. 创建
- 每张表上的索引不应多于6个,索引越多在插入删除时越慢,而且索引会占用很大的磁盘空间。
- 尽量避免使用text, blog, clob大对象大文本的数据类型,空间占取大,而且索引失效。
- 考虑在经常做为where及order by列上加索引。
- 不要在列值可能为null上列上建索引。
- 索引字段的空间占取要尽可能的小。
- 若只含数值信息的字段尽量不要设计为字符型,尽量使用数字型字段
2. SQL编写
- 使用explain查询执行计划看应该用到的索引有没有用到,如果在查询列上加了索引但是在执行计划中看到该索引没有用到那么再根据以下建议调整SQL确保能用到萦引。
- select语句中尽量减少使用select *;多表连接情况下,请给表取别名,并在查询的字段中明确表名。
- 使用子查询嵌套不要超过3层。
- 尽量不要使用子查询作为连接的表使用。
- 在查询集合较大的情况下如果进行集合查询使用[not] exists 关键字,在查询钱要尝试 [not] in 和 [not] exists 的效率。
- 避免在where子句中使用null判断、<>和!= 操作符会导致索引失效,并且会进行全表扫描。
- 避免在where子句中使用函数和表达式,会导致索引失效,函数和表达式可以放在=号的右边进行处理。
- 当只要一行数据时加Limit 1,这样MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
- 应该尽量避免在where子句中用前置模糊查询(select id from t where name like ‘%李’), 这样即便name列有索引也会失效,进行全表扫描。
- 在使用索引字