powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите оптимизировать SQL запрос
12 сообщений из 62, страница 3 из 3
Помогите оптимизировать SQL запрос
    #38290924
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vichkaкак мне заменить остальные , если там значения или выбранные из dropdownlist, a не из textbox1) если требуется проверка на полное соответствие, то лучше вовсе отказаться от Like в пользу =
2) если под всеми понимается Null , то да - можно заменитьvichkaЗапустила- особой разницы не увидела.
Стоит ли заменять?Сейчас, наверное, не стоит, но имейте в виду на будущее.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38293156
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Thanks very much, SERVIT!
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38300258
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Я опять застряла на одном из запросов.
Все тот же продукт, на той же платформе.

Упростила запрос до минимума:

запрос 1:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Count(MessageArchive.MessageID)
FROM  Client.MessageArchive
WHERE (RequestStatusCode = 0)
AND (IssuedBy LIKE 'RADIOLOGY%')
AND (TemplateIDUsed LIKE '%')
AND (DateArchived BETWEEN '2013-03-25'AND '2013-03-26')



Возвращает 516 записей за 2.554 сек.

Query Plan
Relative cost = 723139
◾Call module B.
◾Output the row.

module B
◾Call module C, which populates temp-file A.
◾Call module D, which populates temp-file B.
◾Generate a stream of idkey values using the multi-index combination:
((temp-file A) INTERSECT (temp-file B))
◾For each idkey value:
Read master map Client.MessageArchive.Primary, using the given idkey value.
Accumulate the count(ID).

module C
◾Read index map Client.MessageArchive.DateArchived, looping on DateArchived (with a range condition) and ID.
◾For each row:
Add a row to temp-file A, subscripted by ID,
with no node data.

module D
◾Read index map Client.MessageArchive.TemplateIDUsed, looping on %SQLUPPER(TemplateIDUsed) (with a %STARTSWITH range condition) and ID.
◾For each row:
Add a row to temp-file B, subscripted by ID,
with no node data.



А этот запрос:

запрос 2:
Код: sql
1.
2.
3.
4.
5.
SELECT Count(MessageArchive.MessageID)
FROM Client.MessageArchive
WHERE (RequestStatusCode = 0)
AND (IssuedBy LIKE 'RADIOLOGY%')
AND (DateArchived BETWEEN '2013-03-25'AND '2013-03-26')



Возвращает 516 записей за 0.057 сек.

Query Plan
Relative cost = 1013388
◾Call module B.

◾Output the row.

module B
◾Call module C, which populates temp-file A.
◾Call module D, which populates temp-file B.
◾Generate a stream of idkey values using the multi-index combination:
((temp-file A) INTERSECT (temp-file B))
◾For each idkey value:
Read master map Client.MessageArchive.Primary, using the given idkey value.
Accumulate the count(ID).

module C
◾Read index map Client.MessageArchive.DateArchived, looping on DateArchived (with a range condition) and ID.
◾For each row:
Add a row to temp-file A, subscripted by ID,
with no node data.

module D
◾Read index map Client.MessageArchive.IssuedBy, looping on IssuedBy (with a %STARTSWITH range condition) and ID.
◾For each row:
Add a row to temp-file B, subscripted by ID,
with no node data.


Класс проиндексирован по всем этим полям (см. выше переписку).

Как заставить работать идексацию? В Cache2013 можно было бы использовать %ALLINDEX.
А в Cache2008?
Или как можно по-другому оптимизировать запрос?
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38300410
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vichka ,

Код: sql
1.
2.
3.
4.
5.
6.
SELECT Count(MessageArchive.MessageID)
FROM  Client.MessageArchive
WHERE (RequestStatusCode = 0)
AND (IssuedBy LIKE 'RADIOLOGY%')
AND (TemplateIDUsed LIKE '%') -- откуда такая тяга к LIKE '%' и нелюбовь к IS NOT NULL?
AND (DateArchived BETWEEN '2013-03-25'AND '2013-03-26')


Можно было бы выключить индекс TemplateIDUsed , но, к сожалению, в 2008 версии недоступны %ALLINDEX и %IGNOREINDEX (или %IGNOREINDICES ), поэтому пробуйте варианты с подзапросом, например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT Count(MessageID) from
(
SELECT TemplateIDUsed, MessageID
FROM Client.MessageArchive
WHERE (RequestStatusCode = 0)
AND (IssuedBy LIKE 'RADIOLOGY%')
AND (DateArchived BETWEEN '2013-03-25'AND '2013-03-26')
)
WHERE (TemplateIDUsed LIKE '%blablabla%')
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38300656
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit vichka ,
Код: sql
1.
AND (TemplateIDUsed LIKE '%') -- откуда такая тяга к LIKE '%' и нелюбовь к IS NOT NULL?




Плохая наследственность...
Это то, что досталось от создателя проекта...
Теперь вот пытаюсь оптимизировать
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38300685
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vichkaЭто то, что досталось от создателя проекта...
Теперь вот пытаюсь оптимизироватьЭто-то понятно. Непонятно, почему Вы эту конструкцию до сих пор оставляете, когдаservitНо лучше Like '%' заменить на is not null :АленочкаLike '%' - это использовать вообще не советую, жутко тормозная тема.vichkaЗато когда заменила MobileNumber с '%' на MobileNumber с NULL , быстродействие значительно возросло!
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38301146
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме тогоДокументацияFor performance reasons, the predicate %STARTSWITH 'abc' is preferable to the equivalent predicate LIKE 'abc%' .Поэтому вместо
Код: sql
1.
AND (IssuedBy LIKE 'RADIOLOGY%')

лучше
Код: sql
1.
AND (IssuedBy %STARTSWITH 'RADIOLOGY')
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38302546
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, как! %STARTSWITH - это оптимизированный в Cache %LIKE :)
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38303031
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit...
vichkaЗапустила- особой разницы не увидела.
Стоит ли заменять?

Сейчас, наверное, не стоит, но имейте в виду на будущее...


Поэтому оставила как есть, если запрос работает достаточно быстро.
Запросов очень много, и параметров с LIKE в них предостаточно.
А на будущее для себя учла!
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38303059
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня еще один вопрос.
Нашла несоответствие в полях.
Есть несколько классов, которые имеют однаковое поле MessageID.
В трех классах оно объявлено как %Integer (это автосчетчик и Primary Key в одном из них- MessageArchive), а в одном, четвертом, как %String (ReceiptArchive), причем в этом же классе это поле стоит в Primary Key как MessageID || ReceiptResponseID.

Я хотела поменять это поле на %Integer тоже.
Можно ли это делать, если в этой таблице полно записей, или у меня все рухнет (хотя в тестовой системе вроде работает с замененным полем...)?
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38303111
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vichkaМожно ли это делать, если в этой таблице полно записей, или у меня все рухнет?Раз Вы спрашиваете, то - нет, не стоит.
...
Рейтинг: 0 / 0
Помогите оптимизировать SQL запрос
    #38303900
vichka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

Спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 62, страница 3 из 3
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Помогите оптимизировать SQL запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]