Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Читает ли сервер строки при запросе одного поля ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 168
Здравствуйте.

Не могу найти ответ на вопрос как сервер физически читает данные если делается селект только одного поля таблицы ? Происохдит ли при этом чтение всей строки таблицы с диска или нет ?
Проясните пожалуста вопрос кто в курсе дела.
13 янв 17, 13:14    [20102437]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 17422
Вариант 1 - читается страница таблицы, в которой содержится запись, поле которой требуется получить.
Вариант 2 - читается страница индекса, в котором содержится запись, поле которой требуется получить.

Единица чтения с диска - это ни разу не байт...
13 янв 17, 13:16    [20102448]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35446
Сервер читает минимум 8кб страницу. А то и экстент сразу (8 страниц).
13 янв 17, 13:17    [20102453]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
правильный проходящий.
Guest
S_A_V_e,
с диска всегда читаются блоки данных. При работе с диском нет понятий строка, поле и т.д. Есть блоки, страницы, экстенты.
13 янв 17, 13:18    [20102462]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5532
Сервер может прочитать и все страницы, на которых размещена таблица при худшем сценарии.
13 янв 17, 13:41    [20102603]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 4784
сервер может вообще ничего с диска не прочитать если всё в кэше
13 янв 17, 13:43    [20102620]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 168
Собственно откуда взялся такой вопрос:
Таблица содержт 20 колонок.Пользователь выбирает названия колонок таблицы которые он хочет видеть. Например он выбрал city и email. Приложение собирает запрос:
select city, email from persondata


Есть ли в этом смысл или запрос
select * from persondata


будет выполняться с такой же скоростью что и первый ? Т.е. есть ли смысл с точки зрения производительности сервера возиться с определением колонок ?
13 янв 17, 13:45    [20102629]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
invm
Member

Откуда: Москва
Сообщений: 7790
S_A_V_e,

Не путайте что сервер читает при выполнении запроса и что отправляет клиенту - это разные вещи.
13 янв 17, 13:48    [20102657]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5532
S_A_V_e,

по куче без индексов будет выполняться так же, но объем данных, переданных клиенту будет меньше, экономия времени на передаче.
13 янв 17, 13:49    [20102661]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
o-o
Guest
1) если есть подходящий индекс, он будет заюзан.
меньше чтений, быстрее ответ.
"подходящий" индекс на все колонки это уже сама таблица
2) на надо тащить на клиента 100 колонок, если нужно всего 2.
по сети надо гонять как можно меньше данных
3) ну и если среди оставшихся колонок лобы,
это еще хорошая прибавка к пенсии.
вместо просто инроу данных еще полезет собирать оффроу,
которые не нужны
13 янв 17, 13:52    [20102680]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30818
select * плохая практика. Не стоит так делать. Идиотская экономия нажатий на клавиши.
13 янв 17, 13:54    [20102699]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 168
Передача клиенту - это отдельная тема. Пока интересовала только сторона сервера.
Получается разницы для сервера нет и нет смысла собирать только выбранные колонки в запрос.
Спасибо всем за ответы. Вопрос можно считать решенным.
13 янв 17, 13:57    [20102724]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 941
поддержу традицию - columnstoooooore!
13 янв 17, 13:59    [20102739]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 109
S_A_V_e
Получается разницы для сервера нет и нет смысла собирать только выбранные колонки в запрос.

Вы видимо не поняли то, что вам написали. Скажу понятным языком: для сервера есть разница и надо всегда стараться в запросе выбирать только необходимые столбцы!

Если не понятно почему, перечитайте ещё раз то, что вам о-о написал, и вникните в это. Если не понятно, то спросите - тут добрые люди разжуют попонятнее!
13 янв 17, 14:05    [20102777]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
baracs
Member

Откуда: Москва
Сообщений: 7078
S_A_V_e
Получается разницы для сервера нет и нет смысла собирать только выбранные колонки в запрос.
Вам 2 раза написали, что читаться может индекс, если в нем есть все запрашиваемые колонки.
13 янв 17, 14:06    [20102784]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
o-o
Guest
S_A_V_e
нет смысла собирать только выбранные колонки в запрос.

спрошу на форуме и сделаю наоборот, назло всем (себе в первую очередь)
13 янв 17, 14:08    [20102804]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
S_A_V_e
Member

Откуда:
Сообщений: 168
Дабы не вводить никого в заблуждеие: мой вывод сделан исключительно для конкретного случая.
У меня нет blob, image,... полей. Все данные простые.
Я не рассматриваю вопрос передачи данных на клиент.
У меня нет (и врядли могут быть) индексов которые могут включать все возможные комбинации полей. Есть индексы на некоторых поля, но что запросит пользователь предсказать не возможно. Таким образом запрос может быть быстрее только в нескольких конкретных случаях и это не стоит возни с собиранием полей на клиенте.
Поэтому опираясь на ответ
Владислав Колосов
по куче без индексов будет выполняться так же, но объем данных, переданных клиенту будет меньше, экономия времени на передаче.

а так же
Akina
Вариант 1 - читается страница таблицы, в которой содержится запись, поле которой требуется получить.
Вариант 2 - читается страница индекса, в котором содержится запись, поле которой требуется получить.

и ответ
o-o
1) если есть подходящий индекс, он будет заюзан.
меньше чтений, быстрее ответ.
"подходящий" индекс на все колонки это уже сама таблица
...


сделан вывод о том что в моём конкретном случае - без разницы.
13 янв 17, 15:35    [20103406]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 4784
S_A_V_e,

есть простой ответ: писать * в запросе это омерзительно, ни кем не рекомендуется, и вообще у меня от этого хомяк умер
13 янв 17, 15:40    [20103426]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
o-o
Guest
+ животинку жалко


13 янв 17, 16:06    [20103584]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Eleanor
Member

Откуда:
Сообщений: 1690
* - заслужила звание антипаттерна.
Т.е. так делать не надо, но ТС всё равно так сделает.
13 янв 17, 16:16    [20103654]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 26563
S_A_V_e
Получается разницы для сервера нет и нет смысла собирать только выбранные колонки в запрос.
Вроде написали, что для сервера разница есть.
Вы не читаете ответы, что ли, только пишите? :-)
13 янв 17, 16:42    [20103757]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 26563
S_A_V_e
сделан вывод о том что в моём конкретном случае - без разницы.
Ну если без разницы, то лучше указывать требуемые поля, правильно?

Вдруг через Н лет ДБА захочет сделать какой то индекс? Вдруг будут изменены права? Ну и другие тонкости.
13 янв 17, 16:45    [20103770]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 26563
TaPaK
S_A_V_e,

есть простой ответ: писать * в запросе это омерзительно, ни кем не рекомендуется, и вообще у меня от этого хомяк умер
Вот вот, это почти так же омерзительно, как не указывать для объектов имя схемы :-(

Ой, фууу, тут сразу 2 омерзительные вещи:
S_A_V_e
select * from persondata
13 янв 17, 16:47    [20103781]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5532
S_A_V_e,

Вы смотрите недостаточно далеко - только на скорость выполнения.
Если будете использовать подобные запросы в приложениях
select * from persondata

Этот код потенциально содержит ошибки, т.е. имеет в виду то, что у вас в голове :)
Математика (кроме ее специальных областей, но это не тот случай) никогда не имеет что-то в виду, всегда нужно точно указывать параметры.
Вы поставите звездочку, т.е. выбрать все атрибуты, затем добавите атрибут (потом) и получите аварийное завершение, т.к. полей станет больше, чем процедура может вставить в таблицу.
То же касается схемы объекта. Во-первых Вы не можете гарантировать, что схема будет указана по умолчанию для соединения, во-вторых можете нарушить логику, создав объекты с одинаковыми именами в разных схемах. Говорить, что "такое никогда не произойдет" нельзя, все равно, что сказать - стакан никогда не разобьется.

Всегда указывайте алисы для полей выборки, указывайте список полей и указывайте схемы. Получите надежный код.
13 янв 17, 17:05    [20103858]     Ответить | Цитировать Сообщить модератору
 Re: Читает ли сервер строки при запросе одного поля ?  [new]
Alex_496
Member

Откуда: Moscow https://www.dvbi.ru
Сообщений: 3616
Владислав Колосов
S_A_V_e,

Вы смотрите недостаточно далеко - только на скорость выполнения.
Если будете использовать подобные запросы в приложениях
select * from persondata


Этот код потенциально содержит ошибки, т.е. имеет в виду то, что у вас в голове :)
Математика (кроме ее специальных областей, но это не тот случай) никогда не имеет что-то в виду, всегда нужно точно указывать параметры.
Вы поставите звездочку, т.е. выбрать все атрибуты, затем добавите атрибут (потом) и получите аварийное завершение, т.к. полей станет больше, чем процедура может вставить в таблицу.
То же касается схемы объекта. Во-первых Вы не можете гарантировать, что схема будет указана по умолчанию для соединения, во-вторых можете нарушить логику, создав объекты с одинаковыми именами в разных схемах. Говорить, что "такое никогда не произойдет" нельзя, все равно, что сказать - стакан никогда не разобьется.

Всегда указывайте алисы для полей выборки, указывайте список полей и указывайте схемы. Получите надежный код.


новому поколению, пришедших в разработку БД, лениво не только клавиши нажимать, но и гуглить, читать
14 янв 17, 00:24    [20104801]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить