2017-09-05 156 views
0

我不知道該怎麼做這個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

'x'和'y'的'NOT IN'數字可能是更短的列表嗎? –

+2

您可以創建單獨的表來存儲x和y值,對它們進行索引,然後加入到「something」表中,如果從業務邏輯的角度來看這是有意義的。 –

+0

您可以添加x + y並將所有可能的總和存儲在列表中,其中x + y在[全部和]中? –

回答

0

在每個列表中使用帶有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 | 

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

相關問題