Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
Добрый день. Возможно кто-то сможет подсказать, в чем проблема. Меня ситуация с временем выполнения запроса поставила в глухой тупик.
Имеем Delphi 7 + MSSQL 2005.
База для чистоты эксперимента пустая.
Элементарные запросы:
Select count(*) From Towns
4.016 сек

Select * From Towns
0.024 сек

И еще любопытней:

If 1=1 Select count(*) From Towns
4.022 сек

но
If 1=1 Select count(*) From Towns else Select count(*) From Towns
0.005 сек

скриншот:
Картинка с другого сайта.

Проект с запросами прикреплен, если кому хочется быстро попробовать и убедиться. База пустая, одна таблица Towns.
Спасибо за внимание

К сообщению приложен файл (Test.7z - 3Kb) cкачать
18 сен 12, 11:50    [13181039]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
А почему разные запросы должны работать за одинаковое время ?
18 сен 12, 11:51    [13181044]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
Glory,

За одинаковые не должны, конечно. они за доли секунды все должны выполняться. Откуда 4 секунды на выполнение Select Count(*) из таблицы, в которой 2 строки?
В SQL Server Management Studio все выполняется мгновенно.
18 сен 12, 11:55    [13181077]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
За одинаковые не должны, конечно. они за доли секунды все должны выполняться.

Кому должны ?
Python of Jungle
Откуда 4 секунды на выполнение Select Count(*) из таблицы, в которой 2 строки?

Хороший вопрос. Откуда какая то ваша программа берет именно время выполнения запроса _на сервере_ ?
Тем более что в другой программе "SQL Server Management Studio все выполняется мгновенно"
18 сен 12, 11:56    [13181095]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
Glory,

Вы шутите? Засекает и считает, откуда же еще. Должны не мне, а по определению. Не нужно отвечать, если Вам нечего сказать.
18 сен 12, 12:00    [13181123]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Вы шутите? Засекает и считает, откуда же еще

Вы вопрос понимаете ?
Откуда какая то ваша программа берет именно время выполнения запроса _на сервере_ ?
"засекает и считает" - это такие команды на сервере вы выполняете ?

Python of Jungle
Должны не мне, а по определению. Не нужно отвечать, если Вам нечего сказать.

По-видимому, вам все вокруг должны.
18 сен 12, 12:03    [13181151]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Python of Jungle
За одинаковые не должны, конечно. они за доли секунды все должны выполняться. Откуда 4 секунды на выполнение Select Count(*) из таблицы, в которой 2 строки?
В SQL Server Management Studio все выполняется мгновенно.
Ну так отладьте вашу программу, посмотрите, на что тратятся эти 4 секунды. Наверное, не на выполнение запроса.
18 сен 12, 12:09    [13181218]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
alexeyvg,

Виноват, не пояснил.
Это не совсем программа, это пустая форма с четырьмя запросами, больше там вообще ничего нет.
Специальна сделана, для того чтобы убедиться, что тратятся действительно 4 секунды.
18 сен 12, 12:14    [13181279]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Это не совсем программа, это пустая форма с четырьмя запросами, больше там вообще ничего нет.

Т.е. там нет
- ни соединения с сервером
- ни методов переждачи серверу команд
- ни методов выборки результатов
?
Там по всей видимости есть только нечто называемое "засекает и считает"
18 сен 12, 12:18    [13181331]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
qwerty112
Guest
Python of Jungle
...
Проект с запросами прикреплен, если кому хочется быстро попробовать и убедиться. База пустая, одна таблица Towns.
Спасибо за внимание

"неубедился" :))

К сообщению приложен файл. Размер - 36Kb
18 сен 12, 12:21    [13181357]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
qwerty112,

Очень любопытно.
Спасибо, большое, я для этого код и выложил. Delphi 7, MSSQL 2005?
18 сен 12, 12:25    [13181407]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
Glory
Python of Jungle
Это не совсем программа, это пустая форма с четырьмя запросами, больше там вообще ничего нет.

Т.е. там нет
- ни соединения с сервером
- ни методов переждачи серверу команд
- ни методов выборки результатов
?
Там по всей видимости есть только нечто называемое "засекает и считает"


Glory,

TADOConnection и 4 TADOQuery. Больше ничего.
18 сен 12, 12:26    [13181418]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Glory,

TADOConnection и 4 TADOQuery. Больше ничего.

А это уже компоненты сервера что ли ?
Как вы вообще разделяете то, что происходит в вашей программе, и то, что происходит на сервере ?
18 сен 12, 12:28    [13181436]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
Python of Jungle
TADOConnection и 4 TADOQuery. Больше ничего.
Вы профайлером посмотрите, что посылается на сервер и сколько выполняется, потом проще будет искать ошибку.
18 сен 12, 12:30    [13181466]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Python of Jungle
TADOConnection и 4 TADOQuery. Больше ничего.
Полагаете, кроме Вашей программы в Вашей операционной системе ничего не работает?
Время передачи данных с сервера на клиент всегда одинаковое, да?
На сервере всегда работает один процесс?

Что Profiler-то показывает?
И не надо больше про Delphi. При чём он тут?
18 сен 12, 12:33    [13181492]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
qwerty112
Guest
Python of Jungle
qwerty112,

Очень любопытно.
Спасибо, большое, я для этого код и выложил. Delphi 7, MSSQL 2005?

Delphi 7, МС СКЛ 2000
18 сен 12, 12:36    [13181527]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
iap,

Профайлер показывает мгновенное выполнение. Сервер больше ничем не занят, он локальный. Сомневаюсь что операционная система чем-то занята на 4 секунда, да еще строго в зависимости от текст запроса. Delphi виноват или нет - я не пойму. На сервере все выполняется моментально, я добавил в запрос проверку времени выполнения. Люфт по времени происходит после выполнения сервером запроса при передаче данных с сервера на клиент.
18 сен 12, 12:39    [13181556]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Люфт по времени происходит после выполнения сервером запроса при передаче данных с сервера на клиент.

Результаты с сервера забирает клиент.
18 сен 12, 12:42    [13181591]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Python of Jungle
iap,
Профайлер показывает мгновенное выполнение.
Вот и всё.
Дальше все вопросы - к компонентам доступа к данным,
драйверам с их настройками, дельфийскому коду и т.д. и т.п.
18 сен 12, 12:47    [13181660]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
iap,

Вы что-нибудь меняли в настройках ADOConnection и ADOQuery ?
18 сен 12, 12:49    [13181684]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
qwerty112,

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

Всем спасибо, тема закрыта.

Виноват был Microsoft OLE DB Provider for SQL Server. По каким-то непонятным причинам он выполнял переподключение к серверу.
При изменении на SQL Native Client проблема исчезла.
18 сен 12, 12:54    [13181744]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Виноват был Microsoft OLE DB Provider for SQL Server. По каким-то непонятным причинам он выполнял переподключение к серверу.
При изменении на SQL Native Client проблема исчезла.

Так кому там чего должны запросы то были по определению ? Вам есть, что сказать то ?
18 сен 12, 12:56    [13181760]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Python of Jungle
Member

Откуда: Ставрополь
Сообщений: 33
Glory,

Есть. Но я пожалуй не буду с троллями разговаривать :)
18 сен 12, 12:57    [13181769]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
Glory
Member

Откуда:
Сообщений: 104760
Python of Jungle
Есть. Но я пожалуй не буду с троллями разговаривать :)

Ну конечно. Как указывать, кто, как и что должен отвечать, так это нормально.
А как за свои слова ответить - так это с троллями разговаривать.
18 сен 12, 12:59    [13181784]     Ответить | Цитировать Сообщить модератору
 Re: Select count(*) работает дольше, чем Select *  [new]
iap
Member

Откуда: Москва
Сообщений: 47045
Python of Jungle
iap,

Вы что-нибудь меняли в настройках ADOConnection и ADOQuery ?
Да, разумеется. И не один раз!
18 сен 12, 13:01    [13181801]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить