Teljesítmény következményeit ORDER BY COALESCE MySQL

szavazat
2

Az általános probléma az, hogy szeretnék a felhasználók tudják, hogy a hatás, add tetszőleges számú mezőt különböző típusú társítani terméket. Tehát az egyik megoldás Én figyelembe véve a következő:

table `items`
item_id  |  name  

table `parameters`  
parameter_id  |  name  |  type

table `values`  
item_id  |  parameter_id  |  datetimevalue  |  datevalue  |  integervalue  |  etc...

Ha a felhasználó szeretne hozzáadni a „Születési” paramétert néhány saját terméket, hozzátehetjük egy paramétert a paramétereket táblázatot, majd egy bejegyzést az értékeket táblázatban az egyes elemekhez, hogy azt akarja, hogy ez a paraméter, a dátum lesz a DATEVALUE oszlop és az összes többi „érték” hagyott mezők null.

Elrendelni a terméket a „Születési”, feltételezve, ezt a paramétert parameter_id = 1, megtenném

SELECT * from 
items
join values on items.item_id = values.item_id
join parameters on parameters.parameter_id = values.parameter_id

where parameter_id = 1
order by coalesce(values.datetimevalue, values.datevalue, values.integervalue...)

A konkrét kérdés az, lesz ez a sorrend lehet eredményes,? Lesz jó hasznát indexek? Fog csinálni felesleges munka?

Az általános kérdés az, hogy ez a megközelítés helyes gyakorlat? Van egy jobb módja ennek?

A kérdést 26/08/2009 22:20
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
1

Akkor beszélünk EAV modellezése.

Vessünk egy pillantást az EAV modellezése

Válaszolt 26/08/2009 22:28
a forrás felhasználó

szavazat
0

Ez ORDER BY COALESCE ... nem lesz képes kihasználni az index. Az COALESCE fontos? Úgy tűnik, mintha ha ránézünk egy paraméter, rendelés az oszlopok elég lenne, mert az összes értéket lesz az azonos típusú.

Ez a lekérdezés lenne képes kihasználni az index (parameter_id, datetimevalue, DATEVALUE, integervalue), ha csak nem "ORDER BY datetimevalue, DATEVALUE, integervalue".

A hátránya van: 1) úgy néz ki, egy kicsit rendetlen 2) ha sok érték oszlopok és ha az értékeket tábla lesz nagy, hogy index kárba térben és olvas / ír.

Lehet, hogy jobban jár, ha csak hozzá a „SORT_ORDER” (vagy valami) oszlop az értékeket tábla és index, hogy helyette. Továbbá, ha valóban szükség van a COALESCE mert rendezni kívánt értékeket különböző típusú, akkor válasszon ki egy SORT_ORDER számítás, amely a helyes dolgot.

Válaszolt 03/09/2009 05:52
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more