[Moscow.pm] Размышления на тему ORM и вообще работы с БД

Михаил Шогин mshogin на gmail.com
Пт Окт 28 06:02:20 PDT 2011


BBOn Fri, Oct 28, 2011 at 03:30:08PM +0400, Ivan Petrov wrote:
> > > Почему такой яростный упор на то что в DBIC что то не решается.
> Отслеживать
> > > состояние (state) смежных объетков не реализована в DBIC ибо
> >
> > отслеживать смежные объекты - не реализовано
>
> Ибо неуместно. Давай согласимся что здесь ты ожидаеш от DBIC чего то чего
> в нем в принципе быть не должно, даже теоретически
>
> > конструировать запросы - плохо реализовано - ибо хорошо нереализуемо
>
> Вот заладил... Давай посчитаем сколько раз тебя просили показать что
> собственно плохо:
>
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010808.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010810.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010818.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010824.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010827.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010849.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010860.html
> http://mail.pm.org/pipermail/moscow-pm/2011-October/010873.html
>
> Я извиняюсь перед рассылкой что такой тарарам подняли. Явно толку
> не будет никакго. Я не буду больше отвечать на первый вопрос пока
> не появится код (если другие вопросы - буду рад ответить :)
>
>
У меня есть небольшой пример
( пример связан с ORM Django, думаю что на ORM Perl также распространяется )

Имеем след таблицу
create table entities (
 n number,
 title varchar2(100),
 dsc clob,
 status number,
 fd date
)

создаем индексы
create unique index ENTITIES$N on books ( n )
create index ENTITIES$N$STATUS on books ( n, status )

status - доступность сущности ( 0 - доступна , null - не доступна )

выбираем идентификаторы всех доступных сущностей

SQL
select en.n
  from entities en
where en.status = 0

план выполнения

 INDEX FAST FULL SCAN INDEX ENTITIES$N$STATUS

ORM
entities = Entity.objects.filter( status = 0 )

получится запрос
select en.*
  from entities en
where en.status = 0

план
TABLE ACCESS FULL

профит на лицо
+ ко всему прочему следует отметить что записи со status = null в индекс не
попадут, так что профит еще больше чем просто "на лицо"

Также можно построить индекс в который попадут только недоступные сущности и
выбирать используя этот индекс

Еще раз - извиняюсь за шум, и за товарища Петрова тоже
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением
Михаил Шогин.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20111028/abce9912/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm