① NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
② 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
③ 不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。当然,这里并不是说你就不能使用NULL了,现情 况是很复杂的,依然会有些情况下,你需要使用NULL值。 因为需要另外的字段判断记录是不是为null。
① 在确认返回的数据只有一条的情况下,加上LIMIT 1可以增加性能。这样一样,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
② 通过去除不必要的返回字段可以提高性能,例:从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台 独立的服务器的话,这还会增加网络传输的负载。
① 比如一张表中存在userName,userPassword,还有你的家庭住址,个人喜好之类的信息。相比起来我们对userName,userPassword的操作更加的频繁,那其他的个人信息存在这张表上并不是一个明智的选择,可以选择把个人信息放在另外一张表上,这样会让你的表有更好的性能。这个叫做“垂直分割”。是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
② 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
③ 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert和update 的效率,因为 insert 或 update 时有可能会重建索引,所以视具体情况而定。一个表的索引数最好不要超过7个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
④ 对于索引的创建的时候,我们应该要尽量选择短的数据作为索引。
① 开启了mysql服务器查询缓存。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。