Mysql索引和性能优化笔记

  • 使用索引的原则

  • 如果没有唯一性要求,可以选择普通索引

  • 如果列上有唯一性要求,可以选择唯一索引

  • 如果是需要模糊搜索,建议选择全文索引

  • 如果有多个条件一起查询,可以选择组合索引

  • 使用索引需要注意以下几点:

  • 按需使用索引

  • 索引所在的列基数越大越好 , 男女这种字段建立索引的效果并不大 ,基数很小

  • 在组合索引上要注意最左原则

  • 一些MySQL使用建议

  • EXPLAIN 你的 SELECT 查询

  • 就算只要一行数据时使用 LIMIT 1,而且一定要加上where限制条件
    查询的时候如果只要一条数据,但是MySQL依然会去检查全部的记录数,使用 limit 1 的话查询到合适的记录之后MySQL变回返回数据了不再继续查询;更新的时候更应该加上 limit 1,还有要加上where条件,以避免造成不必要的失误而误删数据。

  • 尽量不使用join进行多表查询,将复杂的复合查询拆分出来
    进行多表联查的时候会极大地降低查询效率,在并发的情况下极容易影响到业务,容易发生死锁,所以应该尽量避免。

  • 千万不要 ORDER BY RAND()
    这样使用只让你的数据库的性能呈指数级的下降。这里的问题是:MySQL会不得 不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序。就算是你用了Limit 1也无济于事(因为要排序)

  • 避免 SELECT * 的使用
    只选出你需要的字段就可以了,因为查询的数据越多,查询就会变的越慢。如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。

  • 设计表结构时尽可能的使用 NOT NULL
    不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。

  • 删除数据的时候不要使用物理删除,应该尽量使用软删除
    物理删除是一种极不提倡的做法,失误是不可避免的,删除数据的时候还有可能出现错误的,为了避免造成不可挽回的错误,所以应该使用软删除而不是物理删除。

  • 不要写出 != 这种令人窒息的where条件
    使用 != 进行查询的时候会造成索引的失效,所以即使你设置了索引但是查询的时候依然不会起作用。

  • 安利一个很棒的文章:MySQL索引背后的数据结构及算法原理

  • Explain相关说明:MySQL EXPLAIN相关参数说明

你可能感兴趣的:(Mysql索引和性能优化笔记)