YapfHoofdpagina | Info | Hulp | FAQ (veelgestelde vragen) | Speciale pagina's | Aanmelden


Printervriendelijke versie | Voorbehoud | Privacybeleid

Databases/veel te simpele performance tips

Uit Yapf


Dit is/wordt een lijstje van performance tips die te simpel zijn om te posten, maar dit toch gepost moeten worden.

Inhoud

Programmeerstructuur en aanpak

Gebruik je queries nuttig.

Als je 30 keer een record op wilt vragen, onderzoek dan of je dat kunt samenvatten tot één query. Bij 30 losse queries krijg je ook 30 keer de overhead van het opstarten van een query.

Kijk naar opties als IN(): SELECT * FROM tabel WHERE id IN (1,4,8,24), of gebruik een join met een subquery.

Vermijd IN()

De IN operator is traag omdat elke waarde moet worden vergeleken met de verzameling die door IN wordt opgegeven. Gebruik als het even kan een subquery om de verzamelinge van de IN aan te geven, zodat de database een normale JOIN kan uitvoeren.

Als je de waarden die je in de IN wilt zetten toch al uit een database haalt, join ze dan en ga ze niet eerst ophalen en in een IN zette.

b.v. als je per bezoeker wilt bijhouden welke berichten ze wel en niet gezien hebben, dan is het heel eenvoudig en snel om elke view in de database te loggen en een LEFT JOIN met IS NULL te gebruiken om te bepalen welke items nog niet gezien zijn. Als je de gelezen items in een session zet moet je IN gebruiken en de lijst kan heel snel heel lang worden.

Let op met LIKE

DE LIKE opdracht is een simpele manier om op substrings te zoeken, maar het heeft één bijzonder nadeel; als de gezochte expressie begint met een wildcard dan kan de database geen indexes gebruiken en zal de performance enorm achteruit gaan.

Querystructuur

Herschrijf subselects naar joins.

SELECT
  a.naam
 (SELECT COUNT(*) FROM anderetabel WHERE anderetabel.userid=a.userid) AS num_orders;
FROM
  klanten;

Naar:

SELECT
  a.naam
  , ordercounts.num_orders
FROM
  klanten
LEFT JOIN
 (SELECT COUNT(*) FROM anderetabel GROUP BY userid) AS ordercounts
ON
  ordercounts.userid=a.userid

Redenering: De join vergt maar twee queries terwijl de subselect één extra query vergt per opgehaald resultaat.

Ontvangen van "http://www.yapf.net/index.php/Databases/veel_te_simpele_performance_tips"

Deze pagina is 639 maal bekeken. Deze pagina is het laatst bewerkt op 14 feb 2010 om 16:30.


Zoeken

Bladeren
Hoofdpagina
Gebruikersportaal
In het nieuws
Recente wijzigingen
Willekeurige pagina
Hulp
Bewerken
Brontekst bekijken
Hulp bij bewerken
Paginaopties
Overlegpagina
Nieuw kopje
Printervriendelijke versie
Pagina-informatie
Paginageschiedenis
Verwijzingen naar deze pagina
Verwante wijzigingen
Mijn pagina's
Aanmelden / registreren
Speciale pagina’s
Nieuwe pagina's
Bestandslijst
Statistieken
Meer…