<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">28 октября 2011 г. 15:02 пользователь Михаил Шогин <span dir="ltr"><<a href="mailto:mshogin@gmail.com" target="_blank">mshogin@gmail.com</a>></span> написал:<br>
<div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
У меня есть небольшой пример<div class="gmail_quote"><div>( пример связан с ORM Django, думаю что на ORM Perl также распространяется )</div><div><br></div><div>Имеем след таблицу</div><div><div>create table entities (</div>


<div> n number,</div><div> title varchar2(100),</div><div> dsc clob,</div><div> status number,</div><div> fd date</div><div>)</div></div><div><br></div><div>создаем индексы</div><div><div>create unique index ENTITIES$N on books ( n )</div>


<div>create index ENTITIES$N$STATUS on books ( n, status )</div></div><div><br></div><div>status - доступность сущности ( 0 - доступна , null - не доступна )</div></div></blockquote></div><div><br>Объясните, пожалуйста, разработчикам, что null означает "отсутсвие данных", только "отсутсвие данных" и ничего, кроме "отсутствия данных". Разработчики, работающие с базами данных, должны понимать, что "отсутсвие данных" не может быть использовано как "данные".<br>

<br>В этом конкретном случае "запись недоступна" есть некоторые вполне определённые данные, и для этого статуса должно быть определено полне конкретное значение.<br></div></div></blockquote><div>NULL - тоже значение.</div>
<div><br></div><div>Объяснение простое,</div><div>Поле выставляется в значение NULL для не попадания в индекс.</div><div><br></div><div>Согласен что было бы лучше сделать так </div><div>status - доступность сущности ( 1 - доступна , 0 - не доступна )</div>
<div><br></div><div>однако в таком случае пришлось бы строить индекс</div><div><br></div><div>create index ENTITIES$N$STATUSACTIVE on books (n, case when status = 1 then 1 else null end )</div><div><br></div><div>но в таком случае, для того что бы пойти по индексу, придется использовать запрос вида</div>
<div><br></div><div><div>select en.n </div><div>  from entities en </div><div>where case </div><div>               when en.status = 1 </div><div>               then 1 </div><div>               else null </div><div>          end  = 1</div>
</div><div><br></div><div>как такое сделать используя ORM, я честно не знаю</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="gmail_quote">
<div> </div><div class="im"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
<div class="gmail_quote"><div> выбираем идентификаторы всех доступных сущностей</div>
<div><br></div><div>SQL </div><div><div>select en.n </div><div>  from entities en</div><div>where en.status = 0</div></div><div><br></div><div>план выполнения </div><div><div><br></div><div> INDEX FAST FULL SCAN<span style="white-space:pre-wrap">        </span>INDEX ENTITIES$N$STATUS</div>


</div><div><br></div><div>ORM </div><div>entities = Entity.objects.filter( status = 0 )</div></div></blockquote></div><div><br>Про указание колонок уже упомянули.<br></div></div></blockquote><div>Да, уже отписал по этому поводу </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="gmail_quote"><div> </div><div class="im"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">

<div class="gmail_quote"><div>получится запрос </div><div><div><div><div>select en.* </div><div>  from entities en</div><div>where en.status = 0</div>
</div></div></div><div><br></div><div>план</div><div><div>TABLE ACCESS FULL</div></div><div><br></div><div>профит на лицо</div><div>+ ко всему прочему следует отметить что записи со status = null в индекс не попадут, так что профит еще больше чем просто "на лицо"</div>


<div><br></div><div>Также можно построить индекс в который попадут только недоступные сущности и выбирать используя этот индекс </div><br></div></blockquote></div></div><br clear="all"><div><div></div><div class="h5"><br>
-- <br>Andrei Protasovitski<br>< andrei[dot]protasovitski[at]gmail[dot]com ><br>
Diemen, Netherlands<br>
</div></div><br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>С уважением<br>Михаил Шогин.<br>Tel: +7 915 0311328<br>ICQ: 266776394<br>e-mail: <a href="mailto:shogin@corp.mail.ru">shogin@corp.mail.ru</a><br>Интернет холдинг @<a href="http://mail.ru">mail.ru</a><br>
<a href="http://www.mail.ru">www.mail.ru</a><br>