-
使用索引的原则
-
如果没有唯一性要求,可以选择普通索引
-
如果列上有唯一性要求,可以选择唯一索引
-
如果是需要模糊搜索,建议选择全文索引
-
如果有多个条件一起查询,可以选择组合索引
-
使用索引需要注意以下几点:
-
按需使用索引
-
索引所在的列基数越大越好 , 男女这种字段建立索引的效果并不大 ,基数很小
-
在组合索引上要注意最左原则
-
一些MySQL使用建议
-
EXPLAIN 你的 SELECT 查询
-
就算只要一行数据时使用 LIMIT 1,而且一定要加上where限制条件
查询的时候如果只要一条数据,但是MySQL依然会去检查全部的记录数,使用limit 1
的话查询到合适的记录之后MySQL变回返回数据了不再继续查询;更新的时候更应该加上limit 1
,还有要加上where条件,以避免造成不必要的失误而误删数据。 -
尽量不使用join进行多表查询,将复杂的复合查询拆分出来
进行多表联查的时候会极大地降低查询效率,在并发的情况下极容易影响到业务,容易发生死锁,所以应该尽量避免。 -
千万不要 ORDER BY RAND()
这样使用只让你的数据库的性能呈指数级的下降。这里的问题是:MySQL会不得 不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序。就算是你用了Limit 1也无济于事(因为要排序) -
避免
只选出你需要的字段就可以了,因为查询的数据越多,查询就会变的越慢。如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。SELECT *
的使用 -
设计表结构时尽可能的使用
不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。NOT NULL
-
删除数据的时候不要使用物理删除,应该尽量使用软删除
物理删除是一种极不提倡的做法,失误是不可避免的,删除数据的时候还有可能出现错误的,为了避免造成不可挽回的错误,所以应该使用软删除而不是物理删除。 -
不要写出
使用!=
这种令人窒息的where条件!=
进行查询的时候会造成索引的失效,所以即使你设置了索引但是查询的时候依然不会起作用。