WEB开发过程中MYSQL的优化小结

发表于2014-08-26 14:39  |  次阅读  |  0条评论  |   作者:admin

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是通过程序分批的处理数据,从而将过大的锁表操作拆分为多个较小的操作。

本站关键字:sunny90 web开发 数据库 移动开发 服务器 Nginx Mysql PHP
Copyright © sunny90版权所有 power by sunny90.com  
湘ICP备14012284号-1,粤公网安备 44030602000307号