2014-12-23 7 views
0
Запросов к

В большой базе данных, это быстрее, чтобы выполнить запрос, такие какскорость

select * from table where a = 1 and b = 2 or b = 3 or b = 4; 

или

select * from table where a = 1 and b = 2; 
select * from table where a = 1 and b = 3; 
select * from table where a = 1 and b = 4; 
+0

Я думаю, что это зависит от того, является ли 'a' ключевым или индексирующим или нет ... –

+0

Просто придирчивая записка, первый запрос будет возвращать намного больше, чем вы думаете, это произойдет из-за отсутствия скобок вокруг коллекции переменная b. 'select * from table, где a = 1 и (b = 2 или b = 3 или b = 4)' – Tommy

ответ

1

Как указывали другие, запросы не эквивалентны. Я предполагаю, что первый запрос должен гласить:

select * from table where a = 1 and (b = 2 or b = 3 or b = 4); 

Для ясности я хотел бы предложить:

select * from table where a = 1 and b in (2, 3, 4); 

В общем, это будет лучше, чем задавать три различные запросы, как во второй альтернативе.

2

Вы должны полагаться на СУБД, чтобы сделать оптимизацию для вас. Если бы второй был быстрее, тогда СУБД все равно сделало бы это так.

Пойдите с первым (но скопируйте круглые скобки вокруг условий b, как предлагает Томми).

Смежные вопросы