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 колонки). Струваше си да се прочете :)
Днес всичко си е различно – вчера се хванах да изчистя, да си преместя машината пак в голямата стая (и може пак да кача снимки), сега просто цялата къща изглежда по-добре. Останаха няколко дреболии из банята, и може да помисля какво да правя с многото празни бутилки, ама за това има време.
Нещо, което открих тая сутрин – трябва да си изключа звънеца. Да може да се активира като съм буден и да се спира, преди да си легна. Ако бях по-злобен, щях да добавя и електрошок за натискащите го докато спя …
August 2nd, 2004 at 14:08
mmm sorry…. :(
August 2nd, 2004 at 15:51
Първо – не се прави така дизайн на база брееееееееееееееееееее
и второ коя версия на postgres ползваш?
August 2nd, 2004 at 15:58
Postgresql-7.4
И май ще се убедя, че не се прави така, само че всичко друго като идея ми изглежда куцо…
August 2nd, 2004 at 17:04
требе да се обсъди на бира, пред лаптопа :) обикновенно ми идват много добри идеи за дизайни на база данни
August 4th, 2004 at 14:35
Луд :) Като правиш странни релации в 3ти таблици, поне трябва да сложиш foreign key constraint или най-малкото сам да си направиш интексите, иначе PostgreSQL-а от къде да познае релациите?