sql >> Databasteknik >  >> RDS >> Mysql

mysql:att välja den mest effektiva frågan från de två

Det råder ingen tvekan om att version 1 – separat där klausuler på varje sida av förbundet – kommer att vara snabbare. Låt oss titta på varför version - där klausul över det fackliga resultatet - är sämre:

  • datavolym:det kommer alltid att finnas fler rader i unionsresultatet, eftersom det finns mindre villkor för vilka rader som returneras. Detta innebär mer disk I/O (beroende på index), mer temporär lagring för att hålla raduppsättningen, vilket innebär mer bearbetningstid
  • upprepad skanning:hela resultatet av föreningen måste skannas igen för att tillämpa villkoret, när det kunde ha hanterats under den första skanningen. Detta innebär dubbel hantering av raduppsättningen, om än förmodligen i minnet, men det är ändå extraarbete.
  • index används inte för where-klausuler på ett fackligt resultat. Om du har ett index över främmande nyckelfälten och postType, skulle den inte användas

Om du vill ha maximal prestanda, använd UNION ALL , som skickar raderna rakt ut i resultatet utan overhead, istället för UNION , som tar bort dubbletter (vanligtvis genom sortering) och kan vara dyrt och är onödigt baserat i dina kommentarer

Definiera dessa index och använd version 1 för maximal prestanda:

create index t1_authorID_postType on t1(authorID, postType);
create index t1_websiteID_postType on t1(websiteID, postType);


  1. Fråga element i en kapslad array av ett json-objekt i postgresql 9.4 eller 9.5

  2. Utveckla React med full-stack (WAMP) lokalt

  3. Hur man ansluter till mysql från C# över SSH

  4. MySQL COUNT med LIMIT