开发者社区> 问答> 正文

一个sql执行效率的问题

表结构:
33
A表有200w数据
B表有1000条数据
select from B where cid = 1 的结果集是(1,3,5,10) ,不管cid=,结果集都在10以内。
对比以下三个sql的执行效率:
SQL1:select a.* from A,B where a.bid = b.id and b.cid = 1
SQL2:select from A where a.bid in (select from B where cid = 1)
SQL3:select * from A where a.bid in (1,3,5,10)
很想知道两个表关联的sql 应该如何写最佳。

展开
收起
蛮大人123 2016-02-10 14:47:23 2178 0
2 条回答
写回答
取消 提交回答
  • 几百万数据的写入,不是一条SQL吧?,可以把SQL语句保存到文件中,通过SQL文件执行,不然这么大数据量一旦崩溃,数据是否丢失

    2021-10-12 11:40:11
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    头一条:
    in 子查询会被优化为exists
    全选复制放进笔记explain extended select from A where a.bid in (select from B where cid = 1);
    show warnings;
    note: 这里明显楼主给错了sql, in里应该是 select id from B...
    你可以看到, 此sql被优化为(手写, 未实际验证):
    select * from A where exists (select 1 from B where a.bid =b.id and cid = 1)
    这样本来应该是 从in子查询中拿到10条数据, 去a表走索引查询, 变为:
    遍历a表, 对每条记录去 过exists
    按你的表记录数, 由 10(in子查询结果集) X 1(a表过索引), 变为: 200w(遍历a表) X 1(b表过索引)

    2019-07-17 18:40:21
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载