数据库 跨表查询和分条多次查询对比

现在有一个需求,就是需要A表的数据,但是需要B表的补充和字段排序,也就是需要跨表查询,有三种方案

  1. 连表查询,select * from A,B where A.key = B.key order by B.key1 这种方案,这种方案,简单有效。缺点是sql比较复杂,不利于索引的使用
  2. 第二种方案是拆分sql,分两个sql,使用编程语言控制其中的逻辑,从A中获取全部的key,然后利用 where key in()这种方式

经过测试在A表中灌入1W条数据,B中1W条对应的数据,

第一次测试:

cross table query cost time is : 14500 ms

sep in query cost time is : 765 ms

第二次测试:

cross table query cost time is : 13739 ms

sep in query cost time is : 431 ms

第三次测试:

cross table query cost time is : 13902 ms

sep in query cost time is : 745 ms

由此可见拆分sql,是更有利的方案。

细究原因,根据《高性能mysql》209页介绍,分解关联查询的优势有:

  1. 缓存的效率更高
  2. 单个的查询锁竞争更少
  3. 实现了哈希关联

Leave a comment

Your email address will not be published.

*