Probleem soort: optimalisatie
Probleem beschrijving: LAMP-opstelling gebruikt een MySQL tabel voor het opslaan van de domeinen waarop een virtualhost moet reageren. Echter de query is niet (goed?) geoptimaliseerd voor het opslaan van subdomein-afvanging... (*.mijndomein.nl)
Voorbeeld database 'Domain':
Zoals je ziet test.nl en test2.nl komen op dezelfde site uit, maar nu.test.nl komt op een ander uit. Om dit te query-en voor bijvoorbeeld de url: `www.test.nl` wordt de volgende query toegepast:
Nu zie je het al: die where is vervelend... De reden dat het zo staat is zodat www.test.nl direct al wordt afgevangen door record #1, maar dat nu.test.nl wel netjes naar een ander gaat (en direct *.nu.test.nl ook)
Mijn vraag is dus eigenlijk zijn hier niet betere truucen voor die ervoor zorgen dat die `LIKE CONCAT()` eruit kan waardoor de query een stuk beter te cachen is... ? Hij kan nu namelijk niet de index gebruiken die op domein.name staat...
(de reden voor de ORDER BY is ivm 'meest specifiek ingevoerd domein wat matcht geldt' ... )
Probleem beschrijving: LAMP-opstelling gebruikt een MySQL tabel voor het opslaan van de domeinen waarop een virtualhost moet reageren. Echter de query is niet (goed?) geoptimaliseerd voor het opslaan van subdomein-afvanging... (*.mijndomein.nl)
Voorbeeld database 'Domain':
| id | name | siteId |
|---|---|---|
| 1 | test.nl | 1 |
| 2 | nu.test.nl | 2 |
| 3 | test2.nl | 1 |
Zoals je ziet test.nl en test2.nl komen op dezelfde site uit, maar nu.test.nl komt op een ander uit. Om dit te query-en voor bijvoorbeeld de url: `www.test.nl` wordt de volgende query toegepast:
SQL:
1
2
3
4
5
6
7
| SELECT `domain`.`siteId` FROM `domain` WHERE '.www.test.nl' LIKE CONCAT('%.', `domain`.`name`)) ORDER BY LENGTH(`domain`.`name`) DESC; |
Nu zie je het al: die where is vervelend... De reden dat het zo staat is zodat www.test.nl direct al wordt afgevangen door record #1, maar dat nu.test.nl wel netjes naar een ander gaat (en direct *.nu.test.nl ook)
Mijn vraag is dus eigenlijk zijn hier niet betere truucen voor die ervoor zorgen dat die `LIKE CONCAT()` eruit kan waardoor de query een stuk beter te cachen is... ? Hij kan nu namelijk niet de index gebruiken die op domein.name staat...
(de reden voor de ORDER BY is ivm 'meest specifiek ingevoerd domein wat matcht geldt' ... )
Gekkie is a proud member of TheBenny!