Mysql建立索引场景
时间: 2023-07-30 20:04:03 浏览: 95
在以下情况下,建立索引可以提高MySQL查询性能:
1. 主键字段:对于主键字段,MySQL会自动在该列上创建唯一索引。主键索引可确保表中每一行的唯一性,同时也为其他表的外键关联提供了便利。
2. 经常用于筛选或排序的字段:如果一个列经常用于WHERE子句、JOIN操作或ORDER BY子句中,那么在该列上创建索引可以加速这些操作。
3. 外键关联字段:如果一个表与其他表建立了外键关联,对于外键关联字段,创建索引可以加快关联查询的速度。
4. 字符串字段的模糊搜索:对于需要进行模糊搜索的字符串字段,如文章标题、用户姓名等,可以考虑在该列上创建全文索引或前缀索引,以提高模糊搜索的效率。
5. 频繁进行聚合操作的字段:如果某个字段需要频繁进行SUM、COUNT、AVG等聚合操作,可以在该列上创建索引,以加快聚合查询的速度。
需要注意的是,过多地创建索引也会对写入操作产生负面影响,因为每次插入、更新或删除数据时都需要更新索引。因此,在创建索引时需要权衡查询性能和写入性能之间的平衡。另外,对于较小的表或很少被查询的列,不必过度使用索引。
相关问题
mysql索引失效场景
1. 使用函数或表达式查询:当使用函数或表达式查询时,MySQL无法使用索引进行优化,这时索引会失效。
2. 数据类型不匹配:如果索引列和查询语句中的条件列的数据类型不匹配,MySQL也无法使用索引进行优化。
3. like查询:当like查询的通配符(%和_)在开头时,MySQL也无法使用索引进行优化。
4. 组合索引的顺序不正确:组合索引的顺序对查询的优化效果有很大影响,如果组合索引的顺序不正确,MySQL也无法使用索引进行优化。
5. 多表关联查询:当进行多表关联查询时,如果关联条件中的列没有建立索引,则MySQL无法使用索引进行优化。
6. 数据分布不均匀:如果数据分布不均匀,比如某一列的值只有很少几种,那么MySQL使用索引的效果就会变差。
7. 大表查询:当查询的表很大时,MySQL使用索引的效果会变差,甚至可能会放弃使用索引而进行全表扫描。
8. 频繁更新数据的表:当表中的数据经常被更新时,索引的维护成本也会很高,因此MySQL可能会放弃使用索引进行优化。
MySQL索引失效的场景
1. 数据量过小:当数据量过小时,使用索引并不会提高查询效率,反而会增加查询时间和资源消耗。
2. 索引列不符合最左前缀原则:最左前缀原则是指在查询时,只有使用了索引的最左前缀部分,索引才能生效。如果查询语句没有使用索引的最左前缀,那么索引就会失效。
3. LIKE查询以通配符开头:如果查询语句中使用了LIKE查询,并且通配符(%或_)出现在查询字符串的开头,那么索引就会失效。
4. 数据分布不均匀:如果索引列中的数据分布不均匀,那么索引就会失效。例如,一个表中有1000条记录,其中有900条记录的字段值为A,100条记录的字段值为B,如果查询字段值为B的记录,那么使用索引并不能提高查询效率。
5. 查询条件中使用了函数或表达式:如果查询条件中使用了函数或表达式,那么索引就会失效。因为索引是针对字段的,而函数或表达式是针对值的,所以无法使用索引优化查询。
6. 连接查询中未使用索引:如果在连接查询中,未使用连接条件中的索引列,那么索引就会失效。因为连接条件中的索引列是连接的关键,不使用索引会导致全表扫描。
7. 存在大量的NULL值:如果索引列存在大量的NULL值,那么索引就会失效。因为索引不会为NULL值建立索引,所以在查询时会导致全表扫描。
8. 数据表结构变更:如果数据表结构发生变更,如添加或删除字段,那么索引就会失效。需要重新建立索引。
阅读全文