/ / Създайте ляво съединение или добавете няколко допълнителни колони към определена таблица? - mysql, изпълнение

Създаване на ляво съединяване или добавяне на няколко допълнителни колони към определена таблица? - mysql, изпълнение

Чудя се кое би било най-доброто решение(от гледна точка на изпълнението). Имам таблица за поръчки, която може да има конкретна връзка OrderShipment. Поръчката за доставка може да бъде нормална доставка или доставка до сервизен пункт (в Холандия, само точка за отпътуване, когато не сте вкъщи, като супермаркет, видеомагазин и т.н.).

В момента използвам поле HasOrderShipment в таблицата за поръчки, за да определя дали трябва да бъде изпълнена втора заявка, за да се получи пратката.

Когато клиентът избере доставка наservicepoint Трябва да съхранявам подробностите за адреса на тази servicepoint. Сега въпросът ми е, от гледна точка на производителността, трябва ли да разширя таблицата OrderShipment с полета за адрес (оставяйки тези полета NULL във всички други случаи, с изключение на доставката на сервизна точка) или да създам таблица HasOrderShipmentServicePointAddress, където се съхраняват подробностите за адреса.

Таблицата за поръчки е около 5,2 милиона реда и нараства с около 21 500 поръчки на ден (средно от 1-януари-11/23-януари-11).

Отговори:

0 за отговор № 1

Е, с толкова малки маси, не бих искаллично се притеснявайте твърде много за това (И да, 5 милиона реда са доста малки от гледна точка на базата данни). Твърде бавно ли е вашето запитване сега? Ако е така, оптимизирайте го. Ако не, не се притеснявайте за това.

Сега, що се отнася до вашия конкретен въпрос, ако виеимате достатъчно данни, може да се измъкнете с изграждането на обобщена таблица. Тъй като MySQL не поддържа материализирани изгледи (изгледи, които се индексират и съхраняват на диска), добавянето на изглед наистина не помага много от гледна точка на производителността (но ще спомогне за четливост). Вместо това можете да добавите обобщена таблица. Обобщената таблица ще бъде резултат от конкретна заявка. Така че вместо да добавяте допълнителните колони към нормализираната таблица, вие копирате таблицата и добавяте колоните към новата и след това използвате тригери, за да я поддържате актуализирана. Причината да правя това в отделна таблица е, че все още имате нормализираните таблици за налагане на референтна цялост и за заявките, които са по-ефективни с нормализирани данни. Но можете да използвате обобщената таблица за заявки, при които трябва да направите сложни обединения (всъщност предварително изчислявате присъединяването).

Но отново подчертавам, дори не си помисляйте да правите нещо подобно, освен ако не се наложи. Опитайте нормалните маршрути за оптимизация (индекси, EXPLAIN, пренаписване на заявки, повече RAM и т.н.) първо. Използвайте обобщена таблица в краен случай ...