У меня не было ответа, поэтому я попытаюсь объяснить это сам, с моим, по общему признанию, плохим пониманием того, как работает SQL, и некоторыми указателями из Jeroen в комментариях выше.Это, вероятно, не правильно, но из того, что я обнаружил, это может быть правильно, и я знаю, как исправить мою непосредственную проблему, чтобы она могла помочь другим.
Я объясню это по аналогии, так какэто то, что, как я полагаю, происходит:
Представьте, что вы повар в ресторане, и вам нужно готовить большое количество блюд (rows in results
).Вы знаете, что будет много, так как вы говорите вам об этом (TOP 10 or FETCH 10
).
Вы тратите время на подбор множества необходимых ингредиентов (table joins
) и оборудования, которое вы ''Вам понадобится и, как только поступит первый заказ, вы будете уверены, что будете действительно эффективны.Нарезать больше, что вам нужно для первого заказа, положить его в маленькие миски, готовые к использованию на последующих заказах.Первый заказ занимает довольно много времени (30 secs
), поскольку вы планируете заранее и хотите, чтобы последующие блюда выходили как можно быстрее.
Однако, пока вы сидите на кухне в ожиданииследующие заказы .. тогда не приходят.Вот и все, только один заказ.Ну, это была пустая трата времени!Если бы вы просто попытались достать одно блюдо, вы могли бы сделать это намного быстрее (1sec
), но вы заранее планировали что-то, что никогда не было нужно.
На следующую ночь вы бросаете свой предыдущийстратегии и просто делать каждую тарелку за раз.Однако на этот раз есть сотни клиентов.Вы не можете доставить их достаточно быстро, делая их по одному.Время доставки всех заказов было бы намного быстрее, если бы вы планировали заранее, как прошлой ночью.(Я не проверял эту гипотезу, но ожидаю, что это, вероятно, произойдет).
Для моего запроса я не знаю, будет ли результат 1 или 100, хотя я смогуПроведите предварительный анализ на основе критериев поиска, введенных пользователем. Возможно, мне придется адаптировать свой пользовательский интерфейс, чтобы дать мне больше информации, чтобы я мог лучше прогнозировать это, что означает, что я могу выбрать подходящую стратегию для использования SQL в предварительном порядке.На данный момент я оптимизирован для небольшого числа результатов, которые пока работают нормально, но мне нужно провести более обширное тестирование, чтобы увидеть, как влияет производительность на рост набора данных.
"If you want a answer to something, post something that's wrong on the internet and someone will be sure to correct you"