mysql索引优化

  1. 更具数据选择性(unique count / total count),选择合适字段建立索引。
  2. 提早设计好索引,别等到数据量不少的时候再来建立。
  3. 索引长度尽可能短,减小磁盘空间占用。
  4. 数据量大,更新频繁的表不适合建索引。重建索引消耗性能
  5. 使用联合索引的时候,按照最左前缀原则。最左前缀原则是最左边的索引值或索引最左侧得是常量。
  6. 排序的时候,只选择建了索引的字段,而且加上索引条件,实现索引覆盖查询。
  7. 不要过多建立索引--占用磁盘空间,更新数据,重建索引开销更多。
  8. 一个查询不会引用多个索引,若是有,查询优化器会有最优解。(我的认为会找选择性最高的做为索引,或者直接组合成组合索引)

 

总结性能

1.  数据选择性高,索引效率才高优化

2. 数据量大,重建索引消耗性能spa

3. 索引会占磁盘空间设计

4. 因为b+tree的特色,因此要符合最左前缀原则排序

5. 索引即便排好序的数据,select的字段是索引字段,能够实现索引覆盖查询(比全表好); 若是使用索引字段排序,效率更高。索引

 

死锁

innodb的行锁是创建在索引上的。update没有用的索引的化,是锁表。update都会锁聚簇索引(主键、惟一索引)get

InnoDB 引擎,更新操做默认会加行级锁,行级锁会对索引加锁。若是更新语句使用多个索引,行锁会先锁非聚簇索引,再锁聚簇索引。innodb

例子索引死锁例子效率

相关文章
相关标签/搜索