sql >> Database teknologi >  >> RDS >> Mysql

Omgå JOIN-grænsen på 61 tabeller i MySQL ved at indlejre underforespørgsler i hinanden

Du har ret i, at sammenføjning af for mange attributter gennem et EAV-design sandsynligvis vil overskride grænsen for joinforbindelser. Allerede før det er der sandsynligvis en praktisk grænse for sammenføjninger, fordi omkostningerne ved så mange sammenføjninger bliver højere og højere geometrisk. Hvor slemt dette er afhænger af din servers kapacitet, men det er sandsynligvis en del lavere end 61.

Så det er problematisk at forespørge en EAV-datamodel for at producere et resultat, som om det var lagret i en konventionel relationsmodel (én kolonne pr. attribut).

Løsning:gør det ikke med en join pr. attribut, hvilket betyder, at du ikke kan forvente at producere resultatet i et konventionelt række-per-entitet-format udelukkende med SQL.

Jeg er ikke indgående bekendt med Magento-skemaet, men jeg kan udlede af din forespørgsel, at sådan noget kan virke:

SELECT cpe.entity_id
, o.value AS option
, v.value AS option_value
FROM catalog_product_entity AS cpe
INNER JOIN catalog_product_entity_int AS i 
  ON cpe.entity_id = i.entity_id AND i.attribute_id IN (2,3,4)
INNER JOIN eav_attribute_option AS o 
  ON i.value = o.option_id AND i.attribute_id = o.attribute_id
INNER JOIN eav_attribute_option_value AS v
  ON v.option_id = o.option_id;

IN(2,3,4,...) prædikat er hvor du angiver flere attributter. Der er ingen grund til at tilføje flere joinforbindelser for at få flere attributter. De returneres simpelthen som rækker i stedet for kolonner.

Det betyder, at du skal skrive applikationskode for at hente alle rækkerne i dette resultatsæt og tilknytte dem til felter af et enkelt objekt.

Fra kommentarer fra @Axel lyder det som om Magento leverer hjælpefunktioner til at gøre dette forbrugende af et resultatsæt og tilknytte det til et objekt.




  1. Oracle dynamisk DESC og ASC i rækkefølge efter

  2. T-SQL-forespørgsel for at vise tabeldefinition?

  3. StarJoinInfo i udførelsesplaner

  4. Få adgang til eksperternes syn på MVP-topmødet i 2020