powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разбиение одной таблицы на несколько
8 сообщений из 8, страница 1 из 1
Разбиение одной таблицы на несколько
    #36554625
kink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица ObJ вида:
Obj_Id, Atr1, Atr2, … , AtrN

Индексы по всем атрибутам.

Задача: часто и быстро выдавать все (или требуемые) атрибуты объектов с заданными атрибутами.

Код: plaintext
1.
2.
3.
4.
select *
from Obj
where Atr3 = ‘text1’
and Atr10 like ‘%text2%’
and Atr15 like ‘text3%’

В перспективе планируется, что количество атрибутов может достичь тысяч, но для каждого объекта будет заполнен от силы десяток атрибутов.
В связи с этим решил разбить эту таблицу на 4.

Obj:
Obj_Id

Atr:
Atr_Id
Atr_Name

Atr_Val:
Atr_Val_Id
Atr_Val

Obj_Atr:
Obj_Id
Atr_Id
Atr_Val_Id

В таблице Obj_Atr создал индексы: <Obj_Id, Atr_Id>, <Atr_Id, Atr_Val>.
В таблице Atr_Val сделал индексы <Atr_Val_Id> и <Atr_Val>.
В таблице Atr сделал индексы <Atr_Id> и <Atr_Name>.

Сделал вьюху Obj_Atr_v

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select oa.Obj_id 
          ,a.Atr_Name 
          ,av.Atr_Val
from Obj_Atr oa
        ,Atr a 
        ,Atr_Val av
where oa.Atr_Id = a.Atr_Id
and     oa.Atr_Val_Id = av. Atr_Val_Id

Пытаюсь написать запрос, выбирающий требуемые данные.
Какие варианты не пробую, работает существенно дольше исходного запроса.

Спецы, подскажите:
Я принял неправильное решение, решив разбить таблицу? Или неправильно её разбил?
Или косячу с запросом и должно работать не сильно дольше?
Или всё правильно и нужно просто определиться, что важнее скорость или объём места для данных и выбирать разбивать или нет в зависимости от этого.
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36554698
_kyky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я б XDB посмотрел,если оракул у вас, и все атрибуты в одно XML поле запихал, оно и маштабируется тогда проще.
А like всеравно индекс не использует.
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36554892
kink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_kyky,

Используется MySQL в данном случае. В нём есть что-то подобное?
Но про XML поля всё равно почитаю, так как Oracl-ом тоже интересуюсь, для других задач. Спасибо.

Atr15 like ‘text3%’ - использует индекс. Но MySQL вроде всё равно только по одному атрибуту ищет по индексу, а потом просто записи проверяет на соответствие остальных условий.
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36555108
_kyky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не юзал МYSQL, вообще там хранимые процедуры есть не представляю,
в которые можно логику запихнуть, если нет или нет готовых пакетов для поиска по контексту xml, то смысла это конечно не имеет.
МYSQL теперь тоже однако оракуль
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36555216
kink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_kyky,

А в Oracle как бы это работало по времени (по сравнению с исходным и с моим вариантом)?
А то почитал чуток про XML поля. Конечно, всё красиво, но такое чувство, что логика обработки таких полей не самая лёгкая и скорость может ещё больше упасть.
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36569931
kink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитав соседние ветки созданные после моей понял, что данная проблема довольно актуальна :)
И этот велосипед называется EAV. Тенцер даже обзор его написал.

Большинство форумчан в разной степени против этого метода.
Обсуждений этой темы на форму много, но пока вменяемого противопоказания не нашёл, в основном эмоции и необоснованные мнения.
Видимо нужно ещё читать и читать. А то мож действительно зря я с этим велосипедом замутил. :)
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36569937
kink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстити вопрос по скорости решился после расширением индекса в таблице Obj_Atr <Obj_Id, Atr_Id> в <Obj_Id, Atr_Id, Atr_Val> и добавлением на всякий случай индекса <Atr_Val>.

Сегодня ещё на нормальных примерах тесты по гоняю, но на предварительных скорость практически сравнялась с исходной таблицей.
...
Рейтинг: 0 / 0
Разбиение одной таблицы на несколько
    #36570740
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kink wrote:

> Большинство форумчан в разной степени против этого метода.
> Обсуждений этой темы на форму много, но пока вменяемого противопоказания
> не нашёл, в основном эмоции и необоснованные мнения.

противопоказаний и быть не может, просто это -- особенный подход,
у него есть свои особенности, которые дают как преимущества, так
и недостатки. Всё это надо знать, и соответственно решать, что
тебе выгоднее : использовать преимущества или не бороться с недостатками.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разбиение одной таблицы на несколько
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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