账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    select * from a join b on a.id=b.a_id中a是否全表扫描?
    33
    0

    存在两个表a、b,b中一列a_id作为外键存储a表id且有索引

    select * from a join b on a.id=b.a_id

    问1:以上sql是否a表全表扫描,b表使用索引?

    select * from b join a on a.id=b.a_id

    问2:以上sql(join前后a、b顺序对调)是否b表全表扫描,a表使用索引?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 嘉图李的猫 普通会员 1楼

      select * from a join b on a.id=b.a_id中,全表扫描是指在没有使用索引的情况下,系统会扫描整个表以完成查询操作。在上述查询语句中,a表和b表的id列是关联列,这意味着当我们在select * from a join b on a.id=b.a_id中查询时,系统会扫描整个a表和b表,包括所有相关的行。

      但是,如果你想避免全表扫描,你可以在select * from a join b on a.id=b.a_id中使用索引。例如,你可以为a表的id列和b表的a_id列创建一个索引,这将使得在查询时,系统可以直接使用索引,而无需扫描整个表。这样,即使没有使用索引,查询也能成功执行。

      例如,如果你在a表和b表的列名分别为a_id和a,你可以创建索引如下:

      sql CREATE INDEX idx_a_id_b_a ON a (a_id, b_id);

      然后,你可以在select * from a join b on a.id=b.a_id查询语句中使用索引,如下所示:

      sql SELECT * FROM a JOIN b ON a.id = b.a_id;

      这将避免全表扫描,但是可能会影响查询性能,特别是对于大数据集。因此,你需要根据具体情况权衡使用索引的收益和成本。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部