mysql数据库查询优化个人心得
时间:2010-06-22 来源:licaduo
关于数据库的优化高人很多,常用的方法也很多,那些常用的类似索引优化之类的我这里就不介绍了。我只是把我在实际程序应用中的其他方面的优化心得分享下。
我的优化方法有以下:
1。 把一些表放入内存
对于程序启动产生数据,程序退出数据消失的动态数据,可以考虑把这张表放入内存中,使用的方法是改变这张表的存储引擎,具体sql查下文档,这里就不写了。
2。 sql语句的优化。
其实数据库基本的功能应该是存储数据,而不是处理我们的业务逻辑。如果我们把本应该程序自己处理的业务逻辑交给数据库去做,那么收获就是我们自己的程序复杂度小了,但是另外的结果就是查询效率下降。假如我们有3张表:用户表,组表,用户组关系表。假设用户和组是多对多的关系。那么如果查询一个用户所在的组下的全部用户信息。执行这个查询需要下面的步骤
a 从用户组关系表中查询用户有几个组
b 根据组id从用户关系表中分别查询组内的用户
c 根据得到用户id,到用户表中查询用户的详细信息
最简单的办法是把上面查询写在一个sql里交给服务器,另外一种是自己在程序中按照上面的步骤去做。
经过测试,在并发的情况下两种操作的效率差距非常大,效率相差数倍。如果我们联表去查询,数据库相当于是针对每个独立的查询结果进行乘积处理。在并发的情况下,我们把这么多的任务同时交给数据库服务器必然导致效率下降。
所以我的心得是尽量减少复杂的联表查询,而是由程序自己去分开步骤去查询。
3。自己在内存中去实现一张数据库表
对于并发服务器,针对客户端的socket描述符,心跳时间,状态,用户id等的对应关系这些数据是要经常去查询的。针对每一个接收到的数据包都会去查询一次。试想如果我们服务器同时在线的客户端10000个,每个客户端5秒发一数据包,那么这个查询的频率就是非常高的。把这个数据放入数据库中显然是一个不好的选择。
针对这种数据相对简单,但是查询频率非常高的数据,最好的解决方法是把这个表在内存中自己实现。具体的实现方法在我的另外一个文章中详细写了。这里就不写了。
相关阅读 更多 +