2010-06-10 3 views
1

Скажите, что у меня есть таблица X с 100 записями, а для запуска select * from X требуется 100 секунд.Какую производительность можно ожидать от подкачки базы данных?

Как долго я должен ожидать запроса select top 10 * from X?

Я ожидаю, что отношения будут более или менее линейными, поэтому 10 секунд. Правильно ли это, или это отношение нелинейное каким-то образом?

+0

Замените 'top' во втором запросе любым вашим любимым синтаксисом поискового вызова rdbms. Я просто ищу ответ «в общем» – StevenWilkins

ответ

0

Ваша стоимость производительность в двух различных областях:

  • Сколько времени требуется, чтобы выполнить запрос
  • Сколько времени требуется, чтобы вернуть результаты

Часто, запрос будет быстро, но возвращаемые результаты будут медленными, так как они связаны с I/O. Если это так, то вы увидите примерно линейное ускорение, возвращая меньше результатов.

Однако, если сам запрос сложный, все по-другому. Если это не только select * from X, но select * from X where [complicated-expression], то результаты могут сильно различаться между реализациями баз данных. В этом случае в вашей производительности может преобладать сложность запросов, и в этом случае вы не увидите такой выгоды, просто получив меньше результатов.

+0

И, конечно же, вы никогда не захотите использовать select * в любом случае. Для вариантов производительности никогда не возвращайте столбцы, кроме тех, которые вам нужны, и если у вас есть соединение, всегда есть столбцы, которые вам не нужны. Для keepibilty никогда не полагайтесь на select *, так как это может привести к поломке вещей при изменении базы данных. Например, предположим, что вы использовали select * в запросе UNION, и только один из ветвей объединения имел таблицы, в которые был добавлен дополнительный столб. Предположим, вы показываете данные пользователю, и был добавлен столбец, который вы не хотели видеть у пользователя? – HLGEM

+0

справедливо, спасибо. @HLGEM хороший совет. – StevenWilkins