Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Существует табличка с 300000 записей на Cache' и на MS SQL Server. Все поля и индексы аналогичные. Выбор количетва строк в Каше занимает около 3 сек, а на SQL Server 0.05 с. Как можно убыстрить. И вообще может есть статьи по TuneTable и оптимизации запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 09:55 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
=Dimon=Существует табличка с 300000 записей на Cache' и на MS SQL Server. Все поля и индексы аналогичные. Выбор количетва строк в Каше занимает около 3 сек, а на SQL Server 0.05 с. Как можно убыстрить. И вообще может есть статьи по TuneTable и оптимизации запросов? Обманул :) Не идентичные. В Cache' связана Ralationship с parent. То есть все данные хранятся в parent. И получается, что для каждого парента sql запрос считает количество children. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 10:18 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
=Dimon=Как можно убыстрить Без описания таблички, без текста самого sql-запроса? Только по "Крибле, крабле, БУМС"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 16:48 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Класс 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 02:33 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Сделайте bitmap-индекс по любому полю, которое имеет немного уникальных значений (например, deleteFlag), и count будет считаться мгновенно. Так как Ваши типовые запросы не известны, поле для индексирования посоветовать сложно. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 09:02 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Вадим, когда используем Relationship нельзя использовать bitmap индекс. По крайней мере в Cache 5.2 этого сделать не получилось, ругается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2008, 09:57 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Так что делать то? Пытался разнести хранение у чилдренов, не помогает. Если самому написать программу и пробегать по глобали с индексами все ок, можно быстрее получать, но опять же надо тогда и ResutSet переписывать, чтоб он Count считал по-моему. И придется для каждого relationship "parent - children" адаптировать программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 04:07 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
=Dimon=Так что делать то? А запросы иде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 08:32 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
krvsa=Dimon=Так что делать то? А запросы иде? =Dimon=Запрос SELECT count(*) FROM TEST.Data ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 08:52 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
А зачем Вы используете "parent-child"? Я тоже когда-то был на распутье: казалось, что такое хранение может ускорить обработку иерархических запросов. Но тестирование показало, что это не так, и при хранении тех же данных в отдельных таблицах (если угодно, связанных по "one-many"), все шевелилось заметно быстрее. Возможно, этот эффект не носит вселенского характера, но попробуйте. К тому же, перейдя к "one-many", вы сможете использовать bitmap индексы, а это тоже плюс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 11:21 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Может, действительно, count(1) писать? -------- Cache for Windows (x86-32) 2008.1 (Build 401.0U_SU) Wed Feb 27 2008 12:16:24 EST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 11:28 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Тоже используем только "one-many"... Но запрос подсчета количества записей в табличке будет полюбому делаться простым перебором оных... Или не так? Если записей много - будет делаться долго. Чем больше - тем дольше... ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 11:36 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovА зачем Вы используете "parent-child"? Я тоже когда-то был на распутье: казалось, что такое хранение может ускорить обработку иерархических запросов. Но тестирование показало, что это не так, и при хранении тех же данных в отдельных таблицах (если угодно, связанных по "one-many"), все шевелилось заметно быстрее. Возможно, этот эффект не носит вселенского характера, но попробуйте. К тому же, перейдя к "one-many", вы сможете использовать bitmap индексы, а это тоже плюс. Используем за тем, что при parent-to-children children не может существовать без парента, в отличие от one-to-many. При удалении родителей автоматически удаляются дети. Другое дело, что почему-то выборка не ускоряется, если я начинаю хранить детей в отдельной глобали. Все равно при запросе начинает делать full scan родителей и перебор его детей. Да и индексы опять же существуют по детям. Возможно, что здесь дело совсем не в отношении, а как раз таки в производительности на конкретной платформе. Я пробовал на прямом доступе перебор по индексу, времени ушло столько же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 12:11 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Александр КобловМожет, действительно, count(1) писать? Ерунду написал. Попробуйте добавить к TEST.Data индекс Index NewIndex1 [ Extent ]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 12:20 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
=Dimon=Вадим, когда используем Relationship нельзя использовать bitmap индекс. По крайней мере в Cache 5.2 этого сделать не получилось, ругается. Согласен. Чтобы можно было делать bitmap-индексы, нужно чтобы Id был положительным целым числом. Соответственно, в Вашем примере делать можно только bitmap-индекс по свойствам ParentData, что Вашему запросу не помогает. Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 14:43 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Можно еще завести хранимые поля-счетчики потомков для каждого родителя и общий счетчик по всем потомкам и обновлять их в триггерах / callback-методах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2008, 14:48 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Александр Коблов Ерунду написал. Попробуйте добавить к TEST.Data индекс Index NewIndex1 [ Extent ]; Не помогло. В общем переделал все. Сделал отношение one-to-many. Создал битмап-индекс. Запрос подсчета количества для 1,5 млн строк выполняется 1 милли!!! секунду, да и что там считать :) количество строк уже хранится в узле глобала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 01:52 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
авторколичество строк уже хранится в узле глобала Только если записи не удалялись, а на это расчитывать нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 05:41 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Т.е. если хочеш чтобы запрос Код: plaintext выполнялся быстро - нужно иметь хотябы один битмап-индекс? ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 08:17 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
krvsaТ.е. если хочеш чтобы запрос Код: plaintext выполнялся быстро - нужно иметь хотябы один битмап-индекс? ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT Да В дополнение к пользовательским bitmap-индексам, система создает дополнительный "extent index", который как раз и ускоряет подсчет записей. Можно создать такой индекс и самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 09:04 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
krvsaТ.е. если хочеш чтобы запрос Код: plaintext выполнялся быстро - нужно иметь хотябы один битмап-индекс? ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT Не только. Еще нужно отказаться от parent-children. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 11:11 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
=Dimon=Еще нужно отказаться от parent-children. Мы его и не используем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 11:16 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
krvsa=Dimon=Еще нужно отказаться от parent-children. Мы его и не используем. ] А вообще таблиц "миллионок" много с relationship? Какая производительность и конфигурация серверов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 12:38 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Классы пока используем как т.с. "вспомогательно"... Все основные данные хранятся в "собственом хранении"... Т.ч. особой статистики своей нет. Пока собираем опыт других, дабы не вляпаться самим. ---------- Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 12:46 |
|
||
|
Долго выполняется запрос
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovМожно еще завести хранимые поля-счетчики потомков для каждого родителя и общий счетчик по всем потомкам и обновлять их в триггерах / callback-методах. В нормальных СУБД количество экземпляров объекта (объектов класса в терминологии ООП, записей таблицы в терминологии "реляционных" СУБД), количество экземпляров объекта B, связанных с экземпляром объекта A, и некоторые другие количества поддерживаются самой СУБД и используются, в том числе, в оптимизаторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2008, 19:59 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=35665035&tid=1558662]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
137ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 470ms |

| 0 / 0 |
