|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Здравствуйте! Я новичок в Cache. Product: Cache 2008.2 Hardware: Microsoft Windows Server 2008. Мне нужно оптимизировать запрос, написанный раннее. Запрос сложный, я его упростила до минимума, пытаясь оптимизировать. Две таблицы, обе индексированы: Client.ResponseArchive (Primary Key: MobileNumber||ResponseID, 10000 записей), Client.MessageArchive (Primary Key: MessageID, 850000 записей). Сам запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Если запрос выполняется без последнего условия (ResponseArchive.MobileNumber Like '%')- за 2 секунды, с последним- за 1.5 минуты (посортироваы по MobileNumber). Возвращает 539 записей. Как его можно оптимизировать, чтобы он быстро работал и с последним условием? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 18:09 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichka , Как вариант: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но лучше Like '%' заменить на is not null : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Надеюсь, индекс на MobileNumber есть, и в обеих таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 18:30 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Спасибо, сейчас попробую. Да, обе таблицы проиндексированы по MobileNumber. MobileNumber берется из textbox и может содержать часть номера только. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:03 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Запустила запрос. Выполнялся 1 мин. Все равно долго. A PrimaryKey может влиять? Если он в таблице как MobileNumber||ResponseID (плюс проиндексировано отдельно по полям MobileNumber, ResponseID - это я уже сама добавила, изначально индекс был толко по ResponseDate). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:34 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaMobileNumber берется из textbox и может содержать часть номера только.Тогда должно быть Like '%что-то%' ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:34 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaA PrimaryKey может влиять?Есть острая необходимость в отказе от стандартного (системного) первичного ключа? В этом случае Вы лишаетесь в будущем возможности использовать bitmap-индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:41 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
А если textbox пустой и все номера должны быть выбраны, тогда как? - '%'? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:41 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaА если textbox пустой и все номера должны быть выбраны, тогда как? - '%'?is not null ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:44 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitЕсть острая необходимость в отказе от стандартного (системного) первичного ключа? Это когда он не задается в классе явно? Все (классы) создано и работает несколько лет, только тормозить стало, жалуются клиенты. И я не сильна в Cache, поэтому про индексы не знаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:54 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaMobileNumber берется из textbox и может содержать часть номера только.Или использовать предикат "[": Substring Predicates ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 19:54 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaВсё создано и работает несколько летЯсно. vichkaИ я не сильна в Cache, поэтому про индексы не знаюПланы запросов смотрели? Попробуйте ещё подсказки SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 20:04 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitПланы запросов смотрели? Да, смотрела. Только не знаю что делать (see .pdf file attached). Написала в INTERSYSTEMS. Они предлагат переписать в dynamic SQL. А там несколько сложных запросов. Это будет долго- переписывать + тестировать.... servitПопробуйте ещё подсказки SQL Подсказки эти тоже уже знаю- не помогли пока, пробовала с разными OPTIOMIZING WORDS. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 20:23 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaservitПланы запросов смотрели? Да, смотрела. Только не знаю что делать (see .pdf file attached). план запроса весь бы увидеть, в представленном варианте не все видно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 21:27 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaДа, смотрела. Только не знаю что делать (see .pdf file attached).Я хотел бы увидеть планы и результаты моих трёх вариантов: подзапрос, is not null и [ ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 21:28 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
DAiMorплан запроса весь бы увидеть, в представленном варианте не все видноРазве? Во втором запросе нет модулей и, кстати, не используются индексы на даты. vichka , Статистику по таблицам собирали? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2013, 21:39 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
У вас проблема, что включается использование индекса по MobileNumber, каше считает его оптимальным, но ошибается. Какие могут быть варианты: 1. использовать подсказку %Ignoreindices. Не факт, что получится, так как это часть первичного ключа. 2. использовать конструкцию select from ( select ... ) where MobileNumber ... Тогда основной запрос не будет использовать индекс, а фильтрация будет уже в промежуточных результатах 3. Искорежить поле MobileNumber так, чтобы каше не поняла, что по нему можно использовать индекс Типа where string(MobileNumber) like '%..' Пожалуй, самое простое - третий вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 06:46 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Ранее как-то писалось, что такое vichka Код: sql 1. 2. 3.
оптимальнее написать так Код: sql 1. 2.
Причем даже местами поменять Код: sql 1. 2. 3. 4.
А вот это vichka Код: sql 1.
точно как Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 08:30 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaЕсли запрос выполняется без последнего условия Код: sql 1.
- за 2 секунды, с последним- за 1.5 минуты (посортироваы по MobileNumber). А сколько будет по времени работать Код: sql 1.
и Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 08:36 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Вопросы к автору : ResponseText берется из таблицы ResponseArchive? или MessageArchive? Если в селекте поля только из одной таблицы, то вот так можно поробовать: Код: sql 1. 2. 3. 4.
Like '%' - это использовать вообще не советую, жутко тормозная тема. посмотрите раздел Query Optimization Options , в частности %NOFLATTEN и использование этой опции в подзапросах http://docs.intersystems.com/cache20081/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_from#RSQL_C22222 но опять же, при оптимизации всегда смотрите план, так будет проще понять в каком месте оптимизировать и помогают ли дополнительные опции так же думаю что вам могут помочь в форуме по MS SQL Server ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 14:12 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitЯ хотел бы увидеть планы и результаты моих трёх вариантов: подзапрос, is not null и тогда, автор, и мне мой покажите план, %NOFLATTEN в позапросе можно попробовать указать, а иногда наоборот он тормозит запрос и лучше без него ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 14:15 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Аленочкатак же думаю что вам могут помочь в форуме по MS SQL ServerТС разве где-то упомянул про MS SQL Server ? Выше речь шла про Microsoft Windows Server 2008 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 14:19 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servit, читать умею) а sql-запросы оптимизируют не только в Cache, элементарно в форуме MS SQL Server больше народу и спецов по этой части ИМХО, может кто-то что-то умное подскажет, или по вашему если основная среда разработки Cache, то и спрашивать следует только в форуме по Cache ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 16:01 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Аленочка , Если там знают нюансы Caché, умеют оптимизировать специально под Caché, разбираются в подсказках его SQL и умеют читать его планы запросов - пусть обращается. Но если там начнут предлагать фишки сугубо для MS SQL Server, то кого потом автору винить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 16:19 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Извините за поздний ответ. Как мне показать вам планы запросов? Скопировать и вставить здесь как текст или как? Я прицепила ранее файл, кто-то сказал, что не все видно- это все что было, за исключением самих записей. Как мне тогда вам их предоставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:20 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Маленько уточню запрос, опущенное может повлиять на скорость: SELECT DISTINCT TOP 5000 ResponseArchive.ResponseID, ResponseArchive.MobileNumber AS MobileNo, ResponseArchive.ResponseText AS Message, ResponseArchive.ResponseDate FROM %NOTOPOPT Client.ResponseArchive INNER JOIN Client.MessageArchive ON ResponseArchive.MobileNumber = MessageArchive.MobileNumber WHERE ResponseArchive.ResponseDate >= '2013-03-01' AND MessageArchive.DateArchived BETWEEN '2013-03-01' AND '2013-03-31' AND ResponseArchive.MobileNumber Like '%' order by ResponseArchive.MobileNumber, ResponseArchive.ResponseDate desc %NOTOPOPT было рекомендовано раннее by Intersystems- Помогло, но в других запросах, где таблицы не JOIN по части от PrimaryKey, а по какому-нибудь ID. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:30 |
|
|
start [/forum/topic.php?fid=39&msg=38287710&tid=1557136]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 255ms |
total: | 543ms |
0 / 0 |