使用嵌套选择进行查询优化

OschtärEi

我有一张桌子products和一张桌子translationsn为每种产品提供翻译,但始终至少有一个默认翻译(LangID = 0)。

我想要做的是对用户输入的字符串进行“搜索查询”。如果用户使用某种语言的翻译(例如LangID = 1),我只想搜索该语言的翻译(默认语言也不是),但是如果没有所需语言的翻译,我想搜索默认翻译。因此,基本上,默认翻译只是一个备用。

我想到的是:

SELECT * FROM products p JOIN translations t ON p.ID = t.ProductID 
WHERE (t.LangID = 1 OR (t.LangID = 0 AND NOT EXISTS (SELECT id FROM translations t2 WHERE t2.ProductID = p.ID AND t2.LangID = 1))
      AND t.Translation LIKE "Foo%" `

这是最好的方法吗,或者没有嵌套选择就可以做到吗?还是有更好的(性能明智的)查询/方法?

usr

您可以这样执行,但尚不清楚执行计划是好是坏。的组合OREXISTS不可靠造成一个很好的计划。

只参加两次会更安全,更快捷:

select *
from products p
left join translations t1 on t1.langid = 1 and ...
left join translations t0 on t1.langid is null and t0.langid = 0 and ...

然后,使用t1它们的值(如果存在)。如果不是,则使用的值t0谓词t1.langid is null是可选的,但是它允许SQL Server(希望)在第一个联接成功的情况下跳过第二个联接。我已经看到了这种模式的工作原理,但是认为它总是有效的并不安全。

这样就得出了可靠而简单的计划。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

优化SQL查询,使用不同的参数进行多次选择

来自分类Dev

使用DISTINCT优化选择查询

来自分类Dev

如何使用索引优化选择查询

来自分类Dev

优化sql“使用ismember从查询中选择”

来自分类Dev

使用别名优化选择子查询

来自分类Dev

使用LIKE语句进行查询优化

来自分类Dev

使用Java在MongoDB中进行查询优化

来自分类Dev

使用子查询进行查询并进行联接优化

来自分类Dev

优化嵌套查询

来自分类Dev

使用联盟查询进行选择

来自分类Dev

使用联盟查询进行选择

来自分类Dev

如何使用多个选择查询优化UNION mysql查询?

来自分类Dev

MSSQL选择查询优化

来自分类Dev

优化选择不同的查询

来自分类Dev

与MySQL混淆使用PHP嵌套选择查询

来自分类Dev

在嵌套查询中选择使用分组依据

来自分类Dev

NodeJS Sequelize - 使用嵌套选择查询删除

来自分类Dev

结合查询进行查询优化

来自分类Dev

在R中使用嵌套循环进行优化(向量化?)

来自分类Dev

Android:使用Realm进行嵌套查询?

来自分类Dev

使用linq实体进行嵌套查询

来自分类Dev

如何使用Squeel进行嵌套查询?

来自分类Dev

Android:使用Realm进行嵌套查询?

来自分类Dev

如何使用 SQLAlchemy 进行嵌套查询?

来自分类Dev

如何在MySQL中进行嵌套选择查询

来自分类Dev

使用 UNION 和 DISTINCT 优化 MySQL 选择查询

来自分类Dev

使用多个表进行更新和查询优化

来自分类Dev

优化一个SQL选择嵌套在哪里查询

来自分类Dev

优化一个SQL选择嵌套在哪里查询