【发布时间】:2021-12-11 21:02:02
【问题描述】:
我想查询数据库以检索名称列表(名称列表由用户在 python 中提供)。我查找这些姓名的数据的标准如下:结果应该按照用户提供的姓名列表的顺序出现,所以如果我说 ...WHERE name = "Bob" OR name = "Alice" 我希望 Bob 的结果首先出现,然后是 Alice 的结果.第二个标准是,如果搜索一个名字两次,那么结果也应该包含两次,所以我想写下...WHERE name = 'Bob' OR name = 'Bob',这样结果也包含两次 Bob 的行。
我想出了以下查询:
SELECT * FROM
(SELECT *, 1 order_position FROM table WHERE name = 'Alice'
UNION ALL
SELECT *, 2 order_position FROM table WHERE name = 'Bob'
UNION ALL
SELECT *, 3 order_position FROM table WHERE name = 'Charlie'
UNION ALL
SELECT *, 4 order_position FROM table WHERE name = 'Dan'
) r ORDER BY order_position
这个查询效果很好,但是当用户提交数百个名字并且有数百个 UNION ALL 部分时,查询变得非常慢。有没有办法在保持前面提到的两个条件的同时提高查询的性能?
【问题讨论】:
标签: mysql sql performance query-optimization