关联查询筛选关联表字段时,两种JOIN写法是否均能利用索引
JOIN顺序是否会影响localisation表locale索引的利用?
假设有两张表:
article - id, some other properties localisation - id, articleId, locale, title, content
一篇article对应多条localisation记录,localisation表的locale字段建有索引,需要按locale字段进行筛选。
问题:以下两种查询写法是否能同等程度地利用locale索引?还是必须使用第二种写法才能有效利用?(假设字段基数符合要求)
第一种写法:
SELECT * FROM article AS a JOIN localisation AS l ON a.id = l.articleId WHERE l.locale = 5;
第二种写法(反向关联):
SELECT * FROM localisation AS l JOIN article AS a ON l.articleId = a.id WHERE l.locale = 5;
这两种写法完全可以同等程度地利用locale索引,不需要刻意采用第二种写法。
现代关系型数据库的查询优化器会自动解析查询的逻辑意图,不会被你写的表连接顺序束缚。它会识别到WHERE l.locale = 5这个过滤条件的优先级,优先使用locale索引筛选出符合条件的localisation记录,再去关联article表获取对应数据。
只有在极少数老旧版本数据库,或者优化器配置出现异常的场景下,才可能出现依赖写法顺序的情况,但这种情况在当前主流数据库环境中几乎不存在。
内容的提问来源于stack exchange,提问作者nn3112337
相关产品推荐
相关产品推荐

