MYSQL篇:
1、少用select *,很多开发者习惯性的使用 select *查询数据表,再从结果集里取出所需要的数据,殊不知这会增加服务器的开销。最好的方法是要什么查什么,使用select 列1,列2来查询数据表。
2、不要对索引列进行运算,因为这样会使索引失效
上图中对Id进行了除以2的运算,结果导致索引失效,而下图中的sql语句功能与上图相同却命中了索引,这是值得我们注意的。
3、合理的运用mysql的缓存,mysql会缓存重复查询的结果,然而有些查询语句会使得缓存失效。例如要查询一个用户当天的记录,我们常常会使用到
select * from xxtable where dtDate=CURRENT_DATE();却殊不知使用了这类函数的查询语句不会使用mysql的缓存结果,从而降低查询结果。
下面是同样功能却不同效率的查询语句:
结果一目了然,同样的查询结果,性能却差了接近一倍。因此我们在开发中遇到类似问题,完全可以用C++/PHP变量记录当天日期在传入mysql,从而使其运用缓存。
4、对于具有确定记录条数的结果,使用limit限定。例如要在一个 千万级别的表中查询特定QQ号玩家的记录,而这个玩家的记录条数确定为一条。我们常常会使用 select * from xxtable where lUin=xxxx;类似的语句,如果没加limit限定,mysql会在查询到了该玩家的记 录后继续扫描全表,直到将整个表全部扫描完。而如果使用了limit限定,则当mysql查询到结果后会立刻返回,哪种效率高我想不用多说了把?实验结果 如下:
5、尽量将字段设置为数字类型而不是字符类型,很多时候我们都喜欢将年月、数值、时间等数据保存为字符类型。然而当我们查询这些字段时,mysql会和where语句中的条件逐个比较字符串中的每一个字符,而数字类型只需要比较一次即可,效率会高于使用字符类型。
下面的就是一些老生常谈了:
6、尽量不要使用!=、<>、IS NOT NULL、IN等操作符,如果使用了这些操作符,mysql将无法命中索引。
7、使用效率更高的操作符,IN的效率高于BETWEEN,DISTINCT的效率高于GROUP BY,UNION ALL的效率高于UNION。
8、如果不是万不得已,请设置你的字段为NOT NULL。也许有人以为将字段设置成NULL可以节省存储空间,其实相反它需要额外的空间,而且当你程序用该字段时会变成更为复杂。
9、避免使用过大的delete和insert语句,因为这两种指令会导致锁表从而导致无法进行其他操作。但是在很多定时脚本里,我们可能会大批量的插入或删除数据,怎么办呢?有两种解决方案:
1是在mysql使用limit限定每次删除记录的条数,2是通过程序分批的处理数据,从而将过大的锁表操作拆分为多个较小的操作。