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

select price.name as pricename, price.id_price, price.id_firm, price.unit, cost, id_currency, id_sale from price INNER JOIN cost ON cost.id_price=price.id_price and cost.id_city='53002' WHERE ((price.name LIKE 'СВЕТ% %' or price.name LIKE '% СВЕТ%')) and price.id_city='53002' order by price.id_firm


выполняется от 30 до 50 секунд, что недопустимо.

таблицы price, cost более 1 миллиона записей


можно как нибудь оптимизировать запрос?
1 окт 04, 11:55    [1001923]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
Индексы какие на таблицах?
Сколько записей возвращает этот запрос?
План выполнения смотрели? Что забирает наибольшие ресурсы? Сюда его опубликуйте, плз.
1 окт 04, 12:09    [1001944]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
Индексы какие на таблицах?
Сколько записей возвращает этот запрос?
План выполнения смотрели? Что забирает наибольшие ресурсы? Сюда его опубликуйте, плз.



1. индексов никаких нет
2. возвращает 1194 строки
3. план:

общий план


два Table Scan, как я понял, кушают больше всего (сверху вних по ним):

1.
Physical operation: Table Scan
Logical operation: Table Scan
Estimated row count: 10779
Estimated row size: 305
Estimated I/O cost: 19,0
Estimated CPU cost: 0,000
Estimated numbers of exections: 1,0
Estimated cost: 39,0 (65%)
Estimated subfree cost:

2.
Physical operation: Table Scan
Logical operation: Table Scan
Estimated row count: 102 431
Estimated row size: 45
Estimated I/O cost: 13
Estimated CPU cost: 1,00
Estimated numbers of exections: 1,0
Estimated cost: 15,0 (25%)
Estimated subfree cost: 15,0
1 окт 04, 13:46    [1002134]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Алексей2003.
Guest
а вы хотите без индексов чтобы все летало? ставьте индексы и будет выполняться 1-2 секунды.
1 окт 04, 13:56    [1002156]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
tabun

1. индексов никаких нет


Ну вот Вам и ответ.
Сделайте следующее: создайте индексы на табличку cost, колонку id_price и колонку id_city и на табличку price колонку id_price.

Еще вариант - запустить Profiler, выполнить свой запрос и затем натравить на полученную трассу Index Tuning Wizard, хотя он ответит практически то же самое, пожалуй.
1 окт 04, 13:58    [1002160]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
tabun

1. индексов никаких нет


Ну вот Вам и ответ.
Сделайте следующее: создайте индексы на табличку cost, колонку id_price и колонку id_city и на табличку price колонку id_price.

Еще вариант - запустить Profiler, выполнить свой запрос и затем натравить на полученную трассу Index Tuning Wizard, хотя он ответит практически то же самое, пожалуй.



сделал..

снизилось выполнения с 45 секунд до 6-5 секунд.

возможно ли еще уменьшить? до 0-1 секундны
1 окт 04, 14:09    [1002184]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
tabun
сделал..
снизилось выполнения с 45 секунд до 6-5 секунд.
возможно ли еще уменьшить? до 0-1 секундны


План выполнения сюда выклайдывайте
1 окт 04, 14:21    [1002208]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Andrey Leman
Member

Откуда:
Сообщений: 39
У меня похожая проблема, но индекс создать не могу так как в одной из таблиц хранятся транзакции и поле по которому я дулаю JOIN не уникальное
как мне быть в этом случае ?
1 окт 04, 14:25    [1002218]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
Andrey Leman
У меня похожая проблема, но индекс создать не могу так как в одной из таблиц хранятся транзакции и поле по которому я дулаю JOIN не уникальное
как мне быть в этом случае ?


Делайте неуникальный индекс, и все будет нормально. Первичный ключ есть на этой таблице?
1 окт 04, 14:31    [1002235]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
tabun
сделал..
снизилось выполнения с 45 секунд до 6-5 секунд.
возможно ли еще уменьшить? до 0-1 секундны


План выполнения сюда выклайдывайте




тут
1 окт 04, 14:44    [1002270]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
Сделать индекс на табличку Price на price_id кластерным
1 окт 04, 15:20    [1002413]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
Сделать индекс на табличку Price на price_id кластерным


а я сразу все кластерными сделал
1 окт 04, 15:33    [1002504]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Glory
Member

Откуда:
Сообщений: 104764
Не думаю что с таким условием фильтрации как price.name LIKE 'СВЕТ% %' or price.name LIKE '% СВЕТ%' можно добиться лучшего чем сканирование таблицы
1 окт 04, 15:38    [1002530]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
MGR
Member

Откуда:
Сообщений: 536
tabun
тут


Это же план до создания индексов!
После создания он должен измениться
1 окт 04, 15:45    [1002571]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Glory
Не думаю что с таким условием фильтрации как price.name LIKE 'СВЕТ% %' or price.name LIKE '% СВЕТ%' можно добиться лучшего чем сканирование таблицы


то есть меньше чем о 6-5 секундах мечтать не приходится?
1 окт 04, 15:48    [1002597]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
MGR
tabun
тут


Это же план до создания индексов!
После создания он должен измениться


это точно после создания индексов


там даже названия индексов появились IX_Price, IX_Cost
1 окт 04, 15:50    [1002608]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
MGR
Member

Откуда:
Сообщений: 536
tabun

это точно после создания индексов
там даже названия индексов появились IX_Price, IX_Cost


Пардон - ветку читал после изменений.
Ну тогда действительно, конструкция типа
((price.name LIKE 'СВЕТ% %' or price.name LIKE '% СВЕТ%'))

не даст улучшить производительность.
1 окт 04, 15:59    [1002671]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
tabun, а если убрать OR и одно из условий из запроса, сколько запрос будет выполняться?
1 окт 04, 16:23    [1002772]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
MGR
Member

Откуда:
Сообщений: 536
кстати, как бы ещё можно сделать:
добавить два поля (name_1, name_2)
туда тригерами писать первое и второе слово из name, соответсвенно.
Сделать бы по ним индексы.

Ну а дальше
[src]((price.name_1 LIKE 'СВЕТ%' or price.name_2 LIKE 'СВЕТ%'))
[/crc]

Это если уж очень не хватало бы производительности.

Подобный подход использовался мною при поддержке чужой базы для индексации по имени, фамилии - сильно менять структуру нельзя было, а добавить полей и в отчётах их использовать - не проблема.
1 окт 04, 16:32    [1002821]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
tabun, а если убрать OR и одно из условий из запроса, сколько запрос будет выполняться?


если убрать одно OR LIKE

то время запроса уменьшается вдвое
1 окт 04, 17:11    [1003016]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
А разделить запрос на два с UNION ALL, в каждом одно условие?
1 окт 04, 17:21    [1003077]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30801
tabun
Breakneck
tabun, а если убрать OR и одно из условий из запроса, сколько запрос будет выполняться?


если убрать одно OR LIKE

то время запроса уменьшается вдвое



Попробуйте сделать ещё составной индекс на таблицу price, поля id_city и name (именно в таком порядке).
1 окт 04, 17:23    [1003087]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
alexeyvg
tabun
Breakneck
tabun, а если убрать OR и одно из условий из запроса, сколько запрос будет выполняться?


если убрать одно OR LIKE

то время запроса уменьшается вдвое



Попробуйте сделать ещё составной индекс на таблицу price, поля id_city и name (именно в таком порядке).


сдела, ничего не поменялось
1 окт 04, 18:05    [1003247]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
tabun
Guest
Breakneck
А разделить запрос на два с UNION ALL, в каждом одно условие?


сорри за глупость, но как это сделать?
1 окт 04, 18:05    [1003253]     Ответить | Цитировать Сообщить модератору
 Re: Запрос выполняется очень долго!!!  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
select price.name as pricename, price.id_price, price.id_firm, price.unit, cost, id_currency, id_sale
from price
INNER JOIN cost
ON cost.id_price=price.id_price and cost.id_city='53002'
WHERE price.name LIKE 'СВЕТ% %' and price.id_city='53002'
UNION ALL
select price.name as pricename, price.id_price, price.id_firm, price.unit, cost, id_currency, id_sale
from price
INNER JOIN cost
ON cost.id_price=price.id_price and cost.id_city='53002'
WHERE price.name LIKE '% СВЕТ%' and price.id_city='53002'
order by id_firm
1 окт 04, 18:19    [1003288]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить