路飞不会飞 2012-10-14
原文链接:关于数据库查询效率
http://www.12306ng.org/forum.php?mod=viewthread&tid=1249&fromuid=2768
一般向数据库发出查询请求,到客户端返回结果,中间经历验证、缓存、查询、序列化、网络传输等等多个环节和多个层次,每个环节都会带来性能的损失,抛开其它,简单谈谈数据库查询。首先,数据表的建立要非常讲究,索引字段也非常重要,表中该包含哪些字段、不该包含哪些字段?选择什么类型、长度,哪些字段要建立索引?建立什么类型的索引?哪些不能建立,数据表要怎样分区,采用什么分区策略,都要要考虑清楚,不能随便,特别是在千万级以上的海量数据、大并发的情况,对性能的影响更为明显。通过区分核心信息,合理的建立表结构,使页包含尽可能多的行,使查询可以包含多个数据页,以减少查询的IO。索引也是一样。
影响到系统性能的不外乎以下硬件因素或软件因素,硬件方面一般是添加更多的服务器到服务器池,采用负载均衡等等,这个牵涉到架构方面的内容,暂且不谈,软件方便一般使用以下步骤:
1.确定最佳实现方案
首先,从实际的业务需求出发,找出最佳实现方案,就是说,一定要确保方向的正确性。不同的实现方案会有不同的效率,选择最佳的实现方案是成功的第一步,也是最关键的一步。
2.一般情况下,影响服务器性能的主要瓶颈在IO上,所以减少IO操作是首要考虑的,为了减少IO,一是要减少查询结果和查询中间结果的数据量,大的数据量意味着大的IO操作,利用合理的查询逻辑,查询条件和索引,来降低操作的数据量,以明显减少IO。这里查询条件的合理利用和索引的合理利用是关键。
前端的实现要尽可能的精简,保证客户端到服务器之间的网络通讯量尽量减少,中间实现的业务逻辑及其他层要高效,这个要求精炼的业务处理算法和尽量小的性能损耗。数据库层面查询要采用最优化的语句执行计划,结合缓存、负载均衡技术等其它技术来提升查询效率,改善用户体验。