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/

相关文章:

mysql - 单行汇总表应该有主键吗?

MySQL 不能在连接列上使用 ORDER BY

mysql - 如何插入多条记录并删除剩余的记录

mysql - 如何在没有索引的情况下运行查询

sql - 为什么在 SQL 查询中 NOT IN 比 IN 慢很多

mysql - 如何使用MYSQL在新表中创建新ID

MySQL:从多个表中选择 DISTINCT

SQL 减去整整一年

sql - SQL Server 中的窗口函数

sql - 如何使用 DBIx :Class? 执行 WHERE ‘OR’ 和 “AND’