2017-01-24 2 views
0

Я хотел бы спросить, есть ли какое-либо преимущество в производительности 1 над другим.Использование 1 SQL для извлечения нескольких записей или нескольких SQL для получения отдельных записей

Вот пример:

// suppose I want to retrieve 10000 different records 
select * 
from table_a 
where from in (1,2,3,4,5,6 .... 10000) 

// alternatively 
select * 
from table_a 
where from=1 or from=2 or from=3 ... from=10000 

по сравнению с

select * from table_a where from=1 
select * from table_a where from=2 
select * from table_a where from=3 
. 
. 
select * from table_a where from=10000 

Каковы сценарии, что один будет превосходить другие?

Предложение WHERE здесь упрощено, оно может иметь вложенные предложения AND и OR.

+1

в том случае, когда вы показали, использование одного оператора sql должно иметь лучшую производительность. вы также можете упростить предложение where, начиная с <= 10000 (если возможно). – Shiping

+0

@Shiping, yap мой пример упрощен, а как насчет тех, у кого есть несколько аргументов? Для простоты я использую непрерывное число. фактический sql имеет случайные числа, которые не являются смежными. – Mox

+0

, вообще говоря, меньше доступа к IO, лучше производительность. конечно, всегда есть исключения. – Shiping

ответ

1

Существует множество факторов, помимо вашего простого примера.

Для вашего конкретного примера 1 запрос лучше 1000, потому что пример прост и против одного поля. Основной фактор - это операции ввода/вывода в сети, физические и/или логические данные и т. Д.

Но если у вас есть больше условий ГДЕ, особенно когда есть объединения, то может быть сомнительно, что лучше. И это зависит от фактических таблиц БД, отношений, дизайна индексов, типов объединений, размера таблиц и (так далее) ... Как правило, в большинстве случаев 1 SQL лучше, но другие факторы могут быть гораздо важнее чем это.
Все начинается с очень тщательного проектирования базы данных. Ошибки там (случаются довольно часто), стоимость намного позже. Обычно 1000 запросов лучше, когда база данных была разработана плохо.

+0

. Фактический сценарий состоит из нескольких объединений по 4-5 таблицам и может содержать от 4 до 5 и предложений. – Mox

+0

Тогда это зависит от природы этих объединений, если это нормализованные объединения (один-ко-многим внешним ключом к первому ключу), хорошо иметь индексы по столбцам внешнего ключа, а также индексы по полям, участвующим в предложении Where, таком как ваш 'from' column в примере (BTW не является хорошим именем для столбца). Но количество индексов для одной таблицы должно быть в балансе. Слишком многие из них могут повлиять на работу CRUD. Физически каждый индекс является другой таблицей. Удачи! – Vadim

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