MySQL,替代使用 IN 哪个会优先考虑第一个值?

标签 mysql sql query-optimization

我正在尝试使用 IN 函数(在我的 php 脚本中),例如

WHERE Keywords.Word IN ('$search[0]','$search[1]',...)

然而,我使用的第一个词在数据库中是唯一的,第二个是一个非常流行的词。它没有显示第一个词的任何结果。最后我有 LIMIT 100。

理想情况下我不想使用 AND 因为这会限制结果,所以 OR 似乎最好,我只是很惊讶它没有排名第一值(value)高于其他。

我能做什么?

最佳答案

复杂性与 LIMIT 子句合并。你希望它表现良好,所以你需要从任何分支最多获得 100。使用 CASE/IF 对所有行进行排名的简单方法将导致全表扫描。

SELECT * FROM (
    SELECT 1 as prec, column-list FROM table-list
    WHERE Keywords.Word = '$search[0]'
    LIMIT 100) A
UNION ALL
SELECT * FROM (
    SELECT 2 as prec, column-list FROM table-list
    WHERE Keywords.Word = '$search[1]'
    LIMIT 100) B
UNION ALL
SELECT * FROM (
    SELECT 3 as prec, column-list FROM table-list
    WHERE Keywords.Word = '$search[2]'
    LIMIT 100) C
ORDER BY prec
LIMIT 100;

这对于大表来说效果更好。

关于MySQL,替代使用 IN 哪个会优先考虑第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297320/

相关文章:

php - 数据库 |分面搜索已更改

mysql - 错误 : PLS-00410: duplicate fields in RECORD, 不允许表或参数列表

mysql - MySQL中如何任意bin?

python - 使用类别和子类别优化 Django 中的数据库查询

mysql - 计算一列中每一行的相同值

python - '' 中的未知列 'field list'。 Django

SQL 连接主键上的行值

mysql - sql多对多查询索引优化

mysql union,不同的查询优化

mysql - 在 phpmyadmin mysql 中创建表时出现错误