Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему запрос очень медленно выполняется  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Добрый день. Подскажите почему запрос так медленно выполняется?

USE database
Go
SELECT TOP 20 ha.datetime as ha_date,
ha.id_hist_calls as ha_id_hist_calls,
ha.name as ha_name,
s.name as s_name,
ss.name as ss_name
FROM Hist_answer ha
left join Hist_calls hc on hc.id_hist_calls = ha.id_hist_calls
left join Service s on s.id_service = ha.from_id_service
left join Service ss on ss.id_service = ha.id_service WHERE ha.id_firm='48' ORDER BY ha.datetime ASC

Запрос выполняется в течении минуты, размер таблицы 907 mb.
Пробовал убрать все "лишнее"

USE database
Go
SELECT TOP 20 ha.datetime as ha_date,
 ha.id_hist_calls as ha_id_hist_calls,
  ha.name as ha_name,
  FROM Hist_answer ha 
   WHERE ha.id_firm='48' ORDER BY ha.datetime ASC


но скорость выполнения та же...

Хотя аналогичный запрос к таблице 3 GB выполняется в несколько раз быстрее...
11 дек 12, 11:04    [13611069]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Гость333
Member

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

Какие индексы существуют на таблице Hist_answer?
11 дек 12, 11:15    [13611132]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Amateur7,

907 mb. информация ниочем, я могу вам создать таблицу с одной строкой такого же размера, количество строк более полезная информация.

ha.id_firm='48' зачем лишнее преобразование из числа в строку?

Ну и уже спросили, индексы то есть на вашей таблице?
11 дек 12, 11:25    [13611221]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Amateur7
Member

Откуда:
Сообщений: 266
WarAnt
ha.id_firm='48' зачем лишнее преобразование из числа в строку?

это и правда ни к чему, убрал кавычки ha.id_firm=48, время выполнения сократилось на 5 секунд

WarAnt
Ну и уже спросили, индексы то есть на вашей таблице?

Структура таблицы

Картинка с другого сайта.
11 дек 12, 11:37    [13611303]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Не помешал бы индекс по id_firm,datetime . Потом, если результатом запроса берется первые 20 записей из видимо немалого количества записей по фирме, то может быть имеет смысл не поднимать все записи по фирме, а брать скажем за последний день, месяц, год? Это помогло бы ограничить выборку перед ее сортировкой по datetime.
11 дек 12, 11:53    [13611443]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Amateur7
WarAnt
ha.id_firm='48' зачем лишнее преобразование из числа в строку?

это и правда ни к чему, убрал кавычки ha.id_firm=48, время выполнения сократилось на 5 секунд

WarAnt
Ну и уже спросили, индексы то есть на вашей таблице?

Структура таблицы

Картинка с другого сайта.
Нажмите правой клавишей мыши по названию таблицы, выберите Script Table As
и полученный текст - сюда. Что делать с картинками??
11 дек 12, 11:55    [13611458]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Мистер Хенки
Не помешал бы индекс по id_firm,datetime . Потом, если результатом запроса берется первые 20 записей из видимо немалого количества записей по фирме, то может быть имеет смысл не поднимать все записи по фирме, а брать скажем за последний день, месяц, год? Это помогло бы ограничить выборку перед ее сортировкой по datetime.


а как огда вывод делать?
брать данные за посление 20 дней, затем вычислять предыдущую дату и по кругу?
11 дек 12, 11:56    [13611463]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Amateur7
Мистер Хенки
Не помешал бы индекс по id_firm,datetime . Потом, если результатом запроса берется первые 20 записей из видимо немалого количества записей по фирме, то может быть имеет смысл не поднимать все записи по фирме, а брать скажем за последний день, месяц, год? Это помогло бы ограничить выборку перед ее сортировкой по datetime.


а как огда вывод делать?
брать данные за посление 20 дней, затем вычислять предыдущую дату и по кругу?

видимо мы немного не поняли друг друга. У вас в запросе присутствует оператор top 20, что говорит что вам интересны первые по datetime 20 записей, и видимо общее количество записей пускай даже и в разрезе фирмы очень большое. Тогда, если интересно всего лишь первые 20 записей, можно выбрать такой критерий времени, что эти записи гарантированно туда попадут? Ну если такого критерия по времени однозначно не определить, тогда придется сортировать всю выборку, чтоб получить первые 20 записей. Ну надеюсь меня поняли.
11 дек 12, 12:37    [13611814]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Amateur7,

create index ix1 on Hist_answer (id_firm,[datetime])
11 дек 12, 16:18    [13613646]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
Amateur7
Member

Откуда:
Сообщений: 266
WarAnt
Amateur7,

create index ix1 on Hist_answer (id_firm,[datetime])


это создаст индекс, но как дальше быть?
14 янв 13, 00:42    [13763977]     Ответить | Цитировать Сообщить модератору
 Re: Почему запрос очень медленно выполняется  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
Amateur7
WarAnt
Amateur7,

create index ix1 on Hist_answer (id_firm,[datetime])


это создаст индекс, но как дальше быть?
Дльше ваш запрос будет выполняться быстрее.
14 янв 13, 09:07    [13764502]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить