小言_互联网的博客

重构查询的方式

226人阅读  评论(0)

3.1 一个复杂查询还是多个简单查询

在设计查询的时候,应该设计一个复杂查询还是多个简单查询呢?

传统实现中,总是强调要在数据库层完成尽可能多的工作,这样做是因为以前总是认为网络通信、查询解析和优化是一件代价很高的事情。

但是这样的想法对MySQL并不适用。

MySQL运行多个小查询已经不是问题。理由包括,1,MySQL的连接和断开都很轻量级,在返回一个小的结果集方面很高效。2,现代网速有了很大提升,无论带宽还是延迟。3,通用服务器上每秒运行10万个查询,即使千兆网卡也能满足每秒2000次查询。

MySQL内部每秒能够扫描内存中的上百万行数据,相比之下,MySQL响应数据给客户端就慢得多了。

3.2 切分查询

对于大查询的优化方式是分而治之,将大查询拆分为小查询,每个查询的功能完全一样,只完成一部分工作,每次只返回一小部分查询结果。

举例,删除旧的数据的例子。定期的清理大量数据时,如果使用一个大的语句一次性完成的话,则可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小但是重要的查询。可以每次只删除一万条数据。

3.3 分解关联查询

很多高性能应用都会对关联查询进行分解。简单的说,可以将关联查询拆分为,对每一个表进行一次单表查询,然后将结果在应用程序中进行关联。

拆分后的优势为:

让缓存更高效。对查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,可以充分利用未变化的表的查询缓存。

查询拆分后,执行单个查询可以减少锁的竞争。


转载:https://blog.csdn.net/li_canhui/article/details/101226665
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场