[MySQL] Index op resultaat van sub-query?

Pagina: 1
Acties:

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
In de eeuwigdurende tocht op weg naar de ultieme optimalisatie van queries, vroeg ik mij het volgende af. Ik gebruik sinds kort MySQL 4.1 en heb dus toegang tot het fantastische concept van de sub-queries.

In een van de sub-queries haal ik een vrij uitgebreide set met resultaten uit de database. Een van de velden in het resultaat van die subquery is een MAX(<veld>). Nu vroeg ik mij af of het wellicht mogelijk is om iets van een index op die resultaat-set toe te passen, zodat het geheel van de query wellicht sneller werkt.

Ik kan er in de MySQL manual niets over vinden ... zie ik iets over het hoofd?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Pas op dat MySQL niet zo heel geweldige performance haalt met subqueries (iig niet in mijn beleving). Zorg er sowieso voor dat de subquery waar mogelijk indexen gebruikt, maar wat MySQL doet met de resultaten van de subquery moet het helemaal zelf bepalen.
Zo kan het heel wel zo zijn dat die resultaten in een hashtable in het geheugen opgeslagen worden en is het daarmee sowieso al geindexeerd.

Mocht je echter het gevoel hebben dat het sneller moet kunnen, neem dan je subquery apart en stop het resultaat in een (temporary) table (create table .... as select ...), die tabel kan je vervolgens indexen naar believen op aanleggen en kan je eventueel gewoon met joins of weer met subqueries benutten in andere queries.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
gvanh schreef op dinsdag 11 oktober 2005 @ 16:07:
In de eeuwigdurende tocht op weg naar de ultieme optimalisatie van queries, vroeg ik mij het volgende af. Ik gebruik sinds kort MySQL 4.1 en heb dus toegang tot het fantastische concept van de sub-queries.
Welkom in het vorige decennium.
In een van de sub-queries haal ik een vrij uitgebreide set met resultaten uit de database. Een van de velden in het resultaat van die subquery is een MAX(<veld>). Nu vroeg ik mij af of het wellicht mogelijk is om iets van een index op die resultaat-set toe te passen, zodat het geheel van de query wellicht sneller werkt.
MySQL gebruikt in het geheel geen indexen voor subqueries dus het beste wat je kan doen is je query plat maken naar een JOIN. Eerste mogelijke fix is in MySQL 5.1 dus ongeveer 2007. Zie bugtracker.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

jochemd schreef op dinsdag 11 oktober 2005 @ 23:17:
MySQL gebruikt in het geheel geen indexen voor subqueries dus het beste wat je kan doen is je query plat maken naar een JOIN. Eerste mogelijke fix is in MySQL 5.1 dus ongeveer 2007. Zie bugtracker.
Ik heb even gezocht en kon zo gauw niks vinden, kan je wellicht een stel zoektermen/link/bugid geven die dit beschrijft?
Dat de subquery-executie niet bepaald snel gaat had ik zelf al ontdekt. ;)

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Welkom in het vorige decennium.
*zucht* Helaas komt 90% van de hosting-providers niet verder dan een 3.23.x.

Ik zal inderdaad wellicht eens even een kijkje gaan nemen in de wereld van de Temporary tables ... wellicht dat dat zin heeft.

Ik word ondertussen compleet gestoord van het bouwen van 1 enkele query om objecten met de juiste rechten uit de database te halen en vervolgens met 10.000+ objecten in de database nog steeds een beetje snelheid te hebben.

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
ACM schreef op woensdag 12 oktober 2005 @ 07:48:
[...]

Ik heb even gezocht en kon zo gauw niks vinden, kan je wellicht een stel zoektermen/link/bugid geven die dit beschrijft?
Ik heb iets beters voor je: http://lists.mysql.com/mysql/185136

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

offtopic:
Goh, dat lijkt veel op discussies op de Debian mailing lists :P

Wie trösten wir uns, die Mörder aller Mörder?

Pagina: 1