|
|
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
Есть элементарная задача: хранить список объектов, список групп и принадлежность объектов к группам. Как лучше спроектировать БД, чтобы запрос вида "найди данные объектов из заданной группы" выполнялся максимально быстро? Напрашивается решение: objects: id, data groups: id, ... objects_in_groups: id, group_id, object_id Запрос: select objects.data from objects, objects_in_groups where objects.id = objects_in_groups.object_id and objects_in_groups.group_id = 128 Но на практике, даже при создании индексов по нужным полям, такой запрос выполняется очень долго. Какие могу быть варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 16:11 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_Какие могу быть варианты? Ваш вариант работоспособный. Разбирайтесь, какие индексы построены и почему в них сервер не попадает. Рабочий DDL есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 16:58 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
Спасибо. Тогда возможно это особенность конкретной СУБД.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 17:16 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_Есть элементарная задача: хранить список объектов, список групп и принадлежность объектов к группам. Как лучше спроектировать БД, чтобы запрос вида "найди данные объектов из заданной группы" выполнялся максимально быстро? Напрашивается решение: objects: id, data groups: id, ... objects_in_groups: id, group_id, object_id Запрос: select objects.data from objects, objects_in_groups where objects.id = objects_in_groups.object_id and objects_in_groups.group_id = 128 Но на практике, даже при создании индексов по нужным полям, такой запрос выполняется очень долго. Какие могу быть варианты?Сначала нужно понять, сколько записей возвращает такой запрос. Если милион, то ничего удивительного нет Если мало, то нужно задать вопрос в фруме по соответствующей СУБД - там помогут найти проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 17:21 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
Размер выборки колеблется от, примерно, одно тысячной до одной сотой от размера таблицы объектов (2 000-20 000). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 18:00 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_Размер выборки колеблется от, примерно, одно тысячной до одной сотой от размера таблицы объектов (2 000-20 000).И "такой запрос выполняется очень долго" - это сколько? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 18:50 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
alexeyvg, около минуты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 18:52 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_alexeyvg, около минутыТут нужно разделить процессорное время и время получения ответа на клиенте. Процессорное время должно быть меньше, а время получения ответа на клиенте для 10000 строк по одному килобайту и в сети с каналом 1 мб/сек получается 10 секунд - не так уж и мало. А может, там по 100 килобайт данные в каждой строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 19:00 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
alexeyvggoodkat_alexeyvg, около минутыТут нужно разделить процессорное время и время получения ответа на клиенте. Процессорное время должно быть меньше, а время получения ответа на клиенте для 10000 строк по одному килобайту и в сети с каналом 1 мб/сек получается 10 секунд - не так уж и мало. А может, там по 100 килобайт данные в каждой строке? Я имел в виду полное время получения ответа. Запрос выполняется локально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 19:07 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_ пишет: > Размер выборки колеблется от, примерно, одно тысячной до одной сотой от > размера таблицы объектов (2 000-20 000). 20тыщ - тоже много. до 2-3 тысяч старайтесь попадать. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 19:33 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
А название СУБД мы так и не услышали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 19:47 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
Может быть при запросе данного типа происходит большой seek scan и вопрос уже упирается в дисковую подсистему? Сколько примерно записей в секунду может прочитаться при произвольном доступе с БД, считая, что происходит чтение с диска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 22:34 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
goodkat_Может быть при запросе данного типа происходит большой seek scan и вопрос уже упирается в дисковую подсистему? Сколько примерно записей в секунду может прочитаться при произвольном доступе с БД, считая, что происходит чтение с диска?Зависит от размера записи, от диска и от того, кто ещё борется за дисковые ресурсы. Вообще примерно ненамного меньше паспортной скорости дисков. И СУБД назовите. По конкретной СУБД вам сразу подскажут, что посмотреть и что сделать. Пока ваше описание звучит как-то... неопределённо. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 22:49 |
|
||
|
Группы объектов
|
|||
|---|---|---|---|
|
#18+
alexeyvggoodkat_Может быть при запросе данного типа происходит большой seek scan и вопрос уже упирается в дисковую подсистему? Сколько примерно записей в секунду может прочитаться при произвольном доступе с БД, считая, что происходит чтение с диска?Зависит от размера записи, от диска и от того, кто ещё борется за дисковые ресурсы. Вообще примерно ненамного меньше паспортной скорости дисков. И СУБД назовите. По конкретной СУБД вам сразу подскажут, что посмотреть и что сделать. Пока ваше описание звучит как-то... неопределённо. :-) спасибо :) я создал тему в разделе для соответствующей субд (posgres) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 23:21 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35809435&tid=1543449]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 347ms |

| 0 / 0 |
