Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
Привет У меня возникла проблема с производительностью SQL на разросшейся иерархии классов, ситуация такая: От одного persistent класса (назовем его A) создана куча классов наследников (назовем их B,C,D) и соответственно на каждый класс есть своя таблица. В базе все это хранится, как я вижу, в одном единственном глобале. Приложение выполняет запросы по таблицам наследников класса A. Все устраивало до недавних пор пока количество объектов не стало возрастать и я понял что SQL при запросе к таблицам B,C,D перебирает все объекты класса A вместо некоего небольшого их подмножества, относящегося к конкретному классу наследнику. Вопрос - как увеличить быстродействие? Если индекс, то как его создать? Я попробовал построить индекс типа Extent для класса A, но это не повлияло на производительность никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 16:23 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
cache hit, Перебор идет по индексам, а не по данным... Видимо, что-то не так делаете. Подробнее можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 17:05 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
cache_hit дело в том, что что субд должна выбирать только те данные, которые нужно, либо по крайней мере минимумальный выделяемый кусок. И это не зависит от числа классов, и это не только в каше. (Хотя при сложной иерархии классов ошибиться с индексами легче) Индексирование полей нужно делать исходя из того, какими запросами вы пользуетесь. Ну и там хитрости есть в этом деле. В любом случае вам должен помочь план запроса, смотрите его, если что-то не так с быстродействием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2010, 21:01 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. Выполняю запрос select * from D, всего объектов классов B,C,D - 150000, объект класса D - единственный. В плане запроса показано что идет перебор по IDKEY класса D. Запрос работает более 40 секунд, из чего я делаю вывод что перебор идет по всем объектам С другой стороны запрос select count(*) from D отрабатывает за 1-2 секунды, мистика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2010, 05:03 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
cache hit Код: plaintext 1. 2. 3. 4. Выполняю запрос select * from D, всего объектов классов B,C,D - 150000, объект класса D - единственный. В плане запроса показано что идет перебор по IDKEY класса D. Запрос работает более 40 секунд, из чего я делаю вывод что перебор идет по всем объектам С другой стороны запрос select count(*) from D отрабатывает за 1-2 секунды, мистика Как вариант можете в class A добавить поле class это будет имя класса, которое сохраняется в БД ( Property class As %String(MAXLEN = 2000) [ Final, InitialExpression = {$S($G(%this):$zobjclass(%this),$$$TRUE:$$$NULL)}, ReadOnly ]; ). И добавить bitmap-индекс по этому полю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2010, 05:15 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
=Dimon=, насколько я понимаю, мне в каждом запросе нужно будет указать where class='D'? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2010, 05:36 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
cache hit=Dimon=, насколько я понимаю, мне в каждом запросе нужно будет указать where class='D'? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2010, 06:21 |
|
||
|
Производительность SQL на разросшейся иерархии классов
|
|||
|---|---|---|---|
|
#18+
Можно конечно попробовать сделать свой обход глобалов, при выполнении запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2010, 06:23 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36693974&tid=1558037]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 392ms |

| 0 / 0 |
