有没有更好的方法来执行此MySQL查询?

时间:2017-09-05 03:39:43

标签: mysql

我想知道执行此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]

上有一个复合索引

似乎有更好的方法来做到这一点,但我不确定。

1 个答案:

答案 0 :(得分:0)

在每个列表中使用100(100)个整数的IN()并不过多询问查询,尤其是x& y被适当地编入索引。将这些列表保存到表中的任何优点都可能不值得付出努力,除非它们稳定或不经常更改(并且不同的用户不需要每个列表都有唯一的列表导致并发问题)。

有一件事需要注意,这些2个独立列表不会像以下尝试演示那样被评估为元组:

SQL Fiddle

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 |

也许不是最好的例子,但希望有用。