2004-08-02 13:48

by Vasil Kolev

УУуууууууууутро….

Снощи по никое време ми дойде желанието да тествам дизайна на базата, който бях направил за библиотеката на Велин, и открих, че е кошмарно бавен, та днес ще си играя да разбера explain-а и да видя защо така. Може в крайна сметка да го променя. А за желаещите ето един забавен explain:

velin=> EXPLAIN
velin-> SELECT b.orig_name, a.name as author, v.path ,g.name as genre
velin->         FROM 
velin->                  books b, authors a, variants v, genres g, relations r, relations r1, relations r2
velin->         WHERE 
velin->                 (b.id=r.id1 AND a.id=r.id2 AND r.rel='BA') AND
velin->                 (b.id=r1.id1 AND v.id=r1.id2 AND r1.rel='BV') AND
velin->                 (b.id=r2.id1 AND g.id=r2.id2 AND r2.rel='BG');
                                                     QUERY PLAN                                                     
--------------------------------------------------------------------------------------------------------------------
 Nested Loop  (cost=0.00..22.52 rows=1 width=890)
   ->  Nested Loop  (cost=0.00..17.68 rows=1 width=816)
         ->  Nested Loop  (cost=0.00..12.85 rows=1 width=308)
               ->  Nested Loop  (cost=0.00..8.01 rows=1 width=186)
                     Join Filter: ("inner".id1 = "outer".id1)
                     ->  Nested Loop  (cost=0.00..6.95 rows=1 width=170)
                           Join Filter: ("inner".id1 = "outer".id1)
                           ->  Nested Loop  (cost=0.00..5.89 rows=1 width=154)
                                 ->  Seq Scan on relations r  (cost=0.00..1.05 rows=1 width=16)
                                       Filter: (rel = 'BA'::bpchar)
                                 ->  Index Scan using authors_pkey on authors a  (cost=0.00..4.82 rows=1 width=154)
                                       Index Cond: (a.id = "outer".id2)
                           ->  Seq Scan on relations r2  (cost=0.00..1.05 rows=1 width=16)
                                 Filter: (rel = 'BG'::bpchar)
                     ->  Seq Scan on relations r1  (cost=0.00..1.05 rows=1 width=16)
                           Filter: (rel = 'BV'::bpchar)
               ->  Index Scan using books_pkey on books b  (cost=0.00..4.82 rows=1 width=154)
                     Index Cond: (b.id = "outer".id1)
         ->  Index Scan using variants_pkey on variants v  (cost=0.00..4.82 rows=1 width=524)
               Index Cond: (v.id = "outer".id2)
   ->  Index Scan using genres_pkey on genres g  (cost=0.00..4.82 rows=1 width=90)
         Index Cond: (g.id = "outer".id2)
(22 rows)

(В общи линии идеята е няколко таблици, и една отделна, която описва ВСИЧКИ релации м/у тях. Май не се хареса на postgresql-а).

Тази нощ най-накрая изчетох “Луната е наставница сурова” на Хайнлайн – на английски, отпечатана на около 80 страници (с 7pt шрифт, в 2 колонки). Струваше си да се прочете :)

Днес всичко си е различно – вчера се хванах да изчистя, да си преместя машината пак в голямата стая (и може пак да кача снимки), сега просто цялата къща изглежда по-добре. Останаха няколко дреболии из банята, и може да помисля какво да правя с многото празни бутилки, ама за това има време.

Нещо, което открих тая сутрин – трябва да си изключа звънеца. Да може да се активира като съм буден и да се спира, преди да си легна. Ако бях по-злобен, щях да добавя и електрошок за натискащите го докато спя …

5 Responses to “2004-08-02 13:48”

  1. валяк Says:

    mmm sorry…. :(

  2. Георги Чорбаджийски Says:

    Първо – не се прави така дизайн на база брееееееееееееееееееее
    и второ коя версия на postgres ползваш?

  3. Васил Колев Says:

    Postgresql-7.4
    И май ще се убедя, че не се прави така, само че всичко друго като идея ми изглежда куцо…

  4. Георги Чорбаджийски Says:

    требе да се обсъди на бира, пред лаптопа :) обикновенно ми идват много добри идеи за дизайни на база данни

  5. kay Says:

    Луд :) Като правиш странни релации в 3ти таблици, поне трябва да сложиш foreign key constraint или най-малкото сам да си направиш интексите, иначе PostgreSQL-а от къде да познае релациите?

Leave a Reply