powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Долго выполняется запрос
25 сообщений из 25, страница 1 из 1
Долго выполняется запрос
    #35659551
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует табличка с 300000 записей на Cache' и на MS SQL Server. Все поля и индексы аналогичные. Выбор количетва строк в Каше занимает около 3 сек, а на SQL Server 0.05 с. Как можно убыстрить. И вообще может есть статьи по TuneTable и оптимизации запросов?
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35659622
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Dimon=Существует табличка с 300000 записей на Cache' и на MS SQL Server. Все поля и индексы аналогичные. Выбор количетва строк в Каше занимает около 3 сек, а на SQL Server 0.05 с. Как можно убыстрить. И вообще может есть статьи по TuneTable и оптимизации запросов?
Обманул :)
Не идентичные. В Cache' связана Ralationship с parent. То есть все данные хранятся в parent. И получается, что для каждого парента sql запрос считает количество children.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35661133
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Dimon=Как можно убыстрить
Без описания таблички, без текста самого sql-запроса? Только по "Крибле, крабле, БУМС"!
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35662071
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс 1
Class TEST.Data Extends (%Persistent, %Populate) [ ClassType = persistent ]
{

Property name As %String(MAXLEN = 2000);

Property fullname As %String(MAXLEN = 2000);

Property producer As %String(MAXLEN = 255);

Property productCode As %String(MAXLEN = 255);

Property type As %String(MAXLEN = 2000);

Property isConnected As %Boolean;

Property deleteFlag As %Boolean;

Property countryID As %Integer;

Relationship testItem As TEST.ParentData [ Cardinality = parent, Inverse = itemList ];

}
Класс 2
Class TEST.ParentData Extends (%Persistent, %Populate) [ ClassType = persistent ]
{

Property name As %String(MAXLEN = 2000);

Relationship itemList As TEST.Data [ Cardinality = children, Inverse = testItem ];

Property rowCount As %Integer;

Property decodeRowCount As %Integer;

}

Запрос SELECT count(*) FROM TEST.Data
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35662239
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделайте bitmap-индекс по любому полю, которое имеет немного уникальных значений (например, deleteFlag), и count будет считаться мгновенно.
Так как Ваши типовые запросы не известны, поле для индексирования посоветовать сложно.

Вадим
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35662385
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим, когда используем Relationship нельзя использовать bitmap индекс. По крайней мере в Cache 5.2 этого сделать не получилось, ругается.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35664475
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что делать то? Пытался разнести хранение у чилдренов, не помогает. Если самому написать программу и пробегать по глобали с индексами все ок, можно быстрее получать, но опять же надо тогда и ResutSet переписывать, чтоб он Count считал по-моему. И придется для каждого relationship "parent - children" адаптировать программу.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35664570
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Dimon=Так что делать то?
А запросы иде?
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35664594
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa=Dimon=Так что делать то?
А запросы иде?
=Dimon=Запрос SELECT count(*) FROM TEST.Data
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35664980
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем Вы используете "parent-child"? Я тоже когда-то был на распутье: казалось, что такое хранение может ускорить обработку иерархических запросов. Но тестирование показало, что это не так, и при хранении тех же данных в отдельных таблицах (если угодно, связанных по "one-many"), все шевелилось заметно быстрее. Возможно, этот эффект не носит вселенского характера, но попробуйте.
К тому же, перейдя к "one-many", вы сможете использовать bitmap индексы, а это тоже плюс.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665012
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, действительно, count(1) писать?
--------
Cache for Windows (x86-32) 2008.1 (Build 401.0U_SU) Wed Feb 27 2008 12:16:24 EST
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665035
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже используем только "one-many"...

Но запрос подсчета количества записей в табличке будет полюбому делаться простым перебором оных...
Или не так?
Если записей много - будет делаться долго. Чем больше - тем дольше...
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665162
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovА зачем Вы используете "parent-child"? Я тоже когда-то был на распутье: казалось, что такое хранение может ускорить обработку иерархических запросов. Но тестирование показало, что это не так, и при хранении тех же данных в отдельных таблицах (если угодно, связанных по "one-many"), все шевелилось заметно быстрее. Возможно, этот эффект не носит вселенского характера, но попробуйте.
К тому же, перейдя к "one-many", вы сможете использовать bitmap индексы, а это тоже плюс.
Используем за тем, что при parent-to-children children не может существовать без парента, в отличие от one-to-many. При удалении родителей автоматически удаляются дети. Другое дело, что почему-то выборка не ускоряется, если я начинаю хранить детей в отдельной глобали. Все равно при запросе начинает делать full scan родителей и перебор его детей. Да и индексы опять же существуют по детям. Возможно, что здесь дело совсем не в отношении, а как раз таки в производительности на конкретной платформе. Я пробовал на прямом доступе перебор по индексу, времени ушло столько же.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665200
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр КобловМожет, действительно, count(1) писать?
Ерунду написал.
Попробуйте добавить к TEST.Data индекс Index NewIndex1 [ Extent ];
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665777
VadimF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Dimon=Вадим, когда используем Relationship нельзя использовать bitmap индекс. По крайней мере в Cache 5.2 этого сделать не получилось, ругается.

Согласен.
Чтобы можно было делать bitmap-индексы, нужно чтобы Id был положительным целым числом.
Соответственно, в Вашем примере делать можно только bitmap-индекс по свойствам ParentData, что Вашему запросу не помогает.

Вадим
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35665787
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще завести хранимые поля-счетчики потомков для каждого родителя и общий счетчик по всем потомкам и обновлять их в триггерах / callback-методах.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35666943
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Коблов Ерунду написал.
Попробуйте добавить к TEST.Data индекс Index NewIndex1 [ Extent ];
Не помогло.
В общем переделал все. Сделал отношение one-to-many. Создал битмап-индекс. Запрос подсчета количества для 1,5 млн строк выполняется 1 милли!!! секунду, да и что там считать :) количество строк уже хранится в узле глобала.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35666982
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторколичество строк уже хранится в узле глобала
Только если записи не удалялись, а на это расчитывать нельзя
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667037
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. если хочеш чтобы запрос

Код: plaintext
SELECT count(*) FROM Table

выполнялся быстро - нужно иметь хотябы один битмап-индекс?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667080
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТ.е. если хочеш чтобы запрос

Код: plaintext
SELECT count(*) FROM Table

выполнялся быстро - нужно иметь хотябы один битмап-индекс?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
Да

В дополнение к пользовательским bitmap-индексам, система создает дополнительный "extent index", который как раз и ускоряет подсчет записей.
Можно создать такой индекс и самому.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667438
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaТ.е. если хочеш чтобы запрос

Код: plaintext
SELECT count(*) FROM Table

выполнялся быстро - нужно иметь хотябы один битмап-индекс?
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT

Не только. Еще нужно отказаться от parent-children.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667457
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=Dimon=Еще нужно отказаться от parent-children.
Мы его и не используем.
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667805
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa=Dimon=Еще нужно отказаться от parent-children.
Мы его и не используем. ]
А вообще таблиц "миллионок" много с relationship? Какая производительность и конфигурация серверов?
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35667834
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классы пока используем как т.с. "вспомогательно"... Все основные данные хранятся в "собственом хранении"...

Т.ч. особой статистики своей нет. Пока собираем опыт других, дабы не вляпаться самим.
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
Долго выполняется запрос
    #35669089
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovМожно еще завести хранимые поля-счетчики потомков для каждого родителя и общий счетчик по всем потомкам и обновлять их в триггерах / callback-методах.
В нормальных СУБД количество экземпляров объекта (объектов класса в терминологии ООП, записей таблицы в терминологии "реляционных" СУБД), количество экземпляров объекта B, связанных с экземпляром объекта A, и некоторые другие количества поддерживаются самой СУБД и используются, в том числе, в оптимизаторе.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Долго выполняется запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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