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
查看评论