我想知道执行此MySQL语句的最有效方法是什么,如下所示
SELECT id FROM something WHERE x IN
(58, 285, 287, 1928, 175, 1928, 2, 481, 2851, 2875, 21, 498, 582, 198, 18)
AND y IN (57, 28, 29, 85, 101, 587, 201, 598, 982, 105, 78, 92, 100, 200, 909,
1120, 592, 109, 581, 2752, 581, 201, 510 700);
[x,y]
上有一个复合索引似乎有更好的方法来做到这一点,但我不确定。
答案 0 :(得分:0)
在每个列表中使用100(100)个整数的IN()并不过多询问查询,尤其是x& y被适当地编入索引。将这些列表保存到表中的任何优点都可能不值得付出努力,除非它们稳定或不经常更改(并且不同的用户不需要每个列表都有唯一的列表导致并发问题)。
有一件事需要注意,这些2个独立列表不会像以下尝试演示那样被评估为元组:
MySQL 5.6架构设置:
CREATE TABLE something
(`x` int, `y` int)
;
INSERT INTO something
(`x`, `y`)
VALUES
(58, 57),
(58, 28),
(58, 29),
(58, 30),
(58, 31)
;
查询1 :
SELECT *
FROM `something`
WHERE x IN (58)
AND y IN (57, 28, 29)
<强> Results 强>:
| x | y |
|----|----|
| 58 | 57 |
| 58 | 28 |
| 58 | 29 |
查询2 :
SELECT *
FROM `something`
WHERE (x,y) IN ((58,28),(58,29))
<强> Results 强>:
| x | y |
|----|----|
| 58 | 28 |
| 58 | 29 |
也许不是最好的例子,但希望有用。