庆阳工程建设网站,网页设计模板大全,wordpress悬浮电话插件,如何建做校园购物网站文章目录 数据库索引优化1. 选择合适的字段创建索引2. 限值每张表上的索引数量3. 被频繁更新的字段应该慎重建立索引4. 尽可能考虑简历联合索引而不是单列索引5. 避免冗余索引6. 字符串类型的字段使用前缀索引代替普通索引7. 避免索引失效8. 删除长期未使用的索引 数据库索引优… 文章目录 数据库索引优化1. 选择合适的字段创建索引2. 限值每张表上的索引数量3. 被频繁更新的字段应该慎重建立索引4. 尽可能考虑简历联合索引而不是单列索引5. 避免冗余索引6. 字符串类型的字段使用前缀索引代替普通索引7. 避免索引失效8. 删除长期未使用的索引 数据库索引优化
1. 选择合适的字段创建索引
不为 NULL 的字段索引字段的数据应该尽量不为 NULL因为对于数据为 NULL 的字段数据库较难优化。如果字段频繁被查询但又避免不了为 NULL建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。
被频繁查询的字段我们创建索引的字段应该是查询操作非常频繁的字段。
被作为条件查询的字段被作为 WHERE 条件查询的字段应该被考虑建立索引。
频繁需要排序的字段索引已经排序这样查询可以利用索引的排序加快排序查询时间。
被经常频繁用于连接的字段经常用于连接的字段可能是一些外键列对于外键列并不一定要建立外键只是说该列涉及到表与表的关系。对于频繁被连接查询的字段可以考虑建立索引提高多表连接查询的效率。
2. 限值每张表上的索引数量
索引并不是越多越好建议单张表索引不超过 5 个索引可以提高效率同样可以降低效率。
索引可以增加查询效率但同样也会降低插入和更新的效率甚至有些情况下会降低查询效率。
因为 MySQL 优化器在选择如何优化查询时会根据统一信息对每一个可以用到的索引来进行评估以生成出一个最好的执行计划如果同时有很多个索引都可以用于查询就会增加 MySQL 优化器生成执行计划的时间同样会降低查询性能。
3. 被频繁更新的字段应该慎重建立索引
虽然索引能带来查询上的效率但是维护索引的成本也是不小的。 如果一个字段不被经常查询反而被经常修改那么就更不应该在这种字段上建立索引了。
4. 尽可能考虑简历联合索引而不是单列索引
因为索引是需要占用磁盘空间的可以简单理解为每个索引都对应着一颗 B树。如果一个表的字段过多索引过多那么当这个表的数据达到一个体量后索引占用的空间也是很多的且修改索引时耗费的时间也是较多的。如果是联合索引多个字段在一个索引上那么将会节约很大磁盘空间且修改数据的操作效率也会提升。
5. 避免冗余索引
冗余索引指的是索引的功能相同能够命中索引(a, b)就肯定能命中索引(a) 那么索引(a)就是冗余索引。如name,city 和name 这两个索引就是冗余索引能够命中前者的查询肯定是能够命中后者的 在大多数情况下都应该尽量扩展已有的索引而不是创建新索引。
6. 字符串类型的字段使用前缀索引代替普通索引
前缀索引仅限于字符串类型较普通索引会占用更小的空间所以可以考虑使用前缀索引带替普通索引。
7. 避免索引失效
索引失效也是慢查询的主要原因之一常见的导致索引失效的情况有下面这些
使用 SELECT * 进行查询; SELECT * 不会直接导致索引失效如果不走索引大概率是因为 where 查询范围过大导致的但它可能会带来一些其他的性能问题比如造成网络传输和数据处理的浪费、无法使用索引覆盖;创建了组合索引但查询条件未遵守最左匹配原则;在索引列上进行计算、函数、类型转换等操作;以 % 开头的 LIKE 查询比如 like %abc;查询条件中使用 or且 or 的前后条件中有一个列没有索引涉及的索引都不会被使用到;发生隐式转换;如果字段类型是字符串where 时一定用引号括起来否则会因为隐式类型转换索引失效左连接查询或者右连接查询查询关联的字段编码格式不一样可能导致索引失效索引字段上使⽤用 is null is not null可能导致索引失效。对索引列列运算如、-、*、/索引失效。 索引字段上使⽤用 或者 not in时可能会导致索引失效。…
8. 删除长期未使用的索引
删除长期未使用的索引不用的索引的存在会造成不必要的性能损耗。
MySQL 5.7 可以通过查询 sys 库的 schema_unused_indexes 视图来查询哪些索引从未被使用。 资料来源MySQL索引详解 | JavaGuide(Java面试 学习指南)