most-popular.ru

  

Bästa artiklarna:

  
Main / Hur man går med i kolumner i mysql-operatören

Hur man går med i kolumner i mysql-operatören

Syntaksen för att uttrycka sammanfogningar tillåter kapslade sammanfogningar. Till exempel:. I standard SQL är de inte likvärdiga. Generellt kan parenteser ignoreras i kopplingsuttryck som endast innehåller inre kopplingsoperationer.

Tänk på detta anslutningsuttryck :. Efter att ha tagit bort parenteser och grupperingsåtgärder till vänster förvandlas det sammanfogade uttrycket till detta uttryck :. Ändå är de två uttrycken inte likvärdiga. För att se detta antar du att tabellerna t1, t2 och t3 har följande tillstånd :. Tabell t1 innehåller rader 1, 2. Tabell t2 innehåller rad 1 101.

Tabell t3 innehåller rad 101. I följande exempel används en yttre sammanfogningsoperation tillsammans med en inre sammanfogningsoperation :. För den angivna tabellstaten returnerar de två uttrycken olika uppsättningar rader :. Om vi ​​utelämnar parenteser i ett kopplingsuttryck med yttre kopplingsoperatorer kan vi därför ändra resultatuppsättningen för det ursprungliga uttrycket.

Mer exakt kan vi inte ignorera parenteser i högeroperand för vänster yttre anslutningsoperation och i vänsteroperand för högerkopplingsoperation. Med andra ord kan vi inte ignorera parenteser för de inre tabelluttrycken för yttre anslutningsoperationer. Parenteser för den andra operandoperanden för ytterbordet kan ignoreras. Är ekvivalent med detta uttryck för alla tabeller t1, t2, t3 och alla villkor P över attribut t2.

Tänk på följande frågor: I den första frågan bildas den kapslade kopplingen med en vänster koppling. I den andra frågan bildas den med en inre kopplingsoperation.

I den första frågan kan parenteserna utelämnas: Den grammatiska strukturen för kopplingsuttrycket kommer att diktera samma ordning för körning för kopplingsoperationer. För den andra frågan kan parenteser inte utelämnas, även om kopplingsuttrycket här kan tolkas otvetydigt utan dem. I vår utökade syntax krävs parenteserna i t2, t3 i den andra frågan, även om frågan teoretiskt sett kan analyseras utan dem: För anslutningsuttryck som endast involverar inre sammanfogningar och inte yttre sammanfogningar kan parenteser tas bort och sammanfogningar utvärderas från vänster till höger .

Faktum är att tabeller kan utvärderas i valfri ordning. Detsamma gäller i allmänhet inte för yttre sammanfogningar eller för yttre sammanfogningar blandade med inre sammanfogningar. Avlägsnande av parenteser kan förändra resultatet.

Frågor med kapslade yttre kopplingar körs på samma pipeline-sätt som frågor med inre kopplingar. Mer exakt utnyttjas en variant av den integrerade algoritmen för sammanfogad slinga. Antag att en sammanfogningsfråga över 3 tabeller T1, T2, T3 har följande form :. Den inkapslade kopplingsalgoritmen skulle utföra denna fråga på följande sätt :. Notationen t1 t2 t3 indikerar en rad konstruerad genom att sammanfoga kolumnerna i raderna t1, t2 och t3.

En sådan rad sägs vara NULL-kompletterad. I allmänhet införs för varje kapslad slinga för den första inre tabellen i en yttre sammanfogningsoperation en flagga som stängs av före slingan och kontrolleras efter slingan. Flaggan slås på när för den aktuella raden från yttertabellen en matchning från tabellen som representerar den inre operand hittas. Om flaggan fortfarande är av vid slutet av loopcykeln har ingen matchning hittats för den aktuella raden i det yttre bordet.

I det här fallet kompletteras raden med NULL-värden för kolumnerna i de inre tabellerna. Resultatraden skickas till den sista kontrollen för utdata eller till nästa kapslade slinga, men bara om raden uppfyller kopplingsvillkoret för alla inbäddade yttre sammanfogningar.

I exemplet är den yttre sammanfogningstabellen som uttrycks av följande uttryck inbäddad :. För frågan med inre sammanfogningar kan optimeraren välja en annan ordning av kapslade slingor, som den här :. För frågor med yttre sammanfogningar kan optimeraren endast välja en sådan ordning där öglor för yttre bord föregår öglor för innerbord.

Således, för vår fråga med yttre sammanfogningar, är endast en häckningsordning möjlig. För följande fråga utvärderar optimeraren två olika häckar.

I båda häckarna måste T1 bearbetas i den yttre slingan eftersom den används i en yttre skarv. T2 och T3 används i en inre förbindning, så att föreningen måste bearbetas i den inre slingan.

Eftersom kopplingen är en inre koppling kan T2 och T3 emellertid behandlas i endera ordningen. En kapsling utvärderar T2, sedan T3 :. Den andra kapslingen utvärderar T3, sedan T2 :. När vi diskuterar algoritmen för kapslad slinga för inre sammanfogningar, har vi utelämnat några detaljer vars inverkan på utförandet av frågan kan vara enorm.

I det här fallet använder MySQL faktiskt följande kapslade algoritm för körning av frågan med inre kopplingar :. Du ser att var och en av konjunktionerna C1 T1, C2 T2, C3 T3 skjuts ut ur den mest inre slingan till den yttersta slingan där den kan utvärderas. Om C1 T1 är ett mycket begränsande tillstånd kan detta tillståndsnedtryck kraftigt minska antalet rader från tabell T1 som skickas till de inre slingorna.

Som ett resultat kan körningstiden för frågan förbättras enormt. För en fråga med yttre sammanfogningar ska villkoret WHERE endast kontrolleras efter att det har visat sig att den aktuella raden från den yttre tabellen har en matchning i de inre tabellerna. Således kan optimeringen av att trycka förhållanden ut ur de inre kapslade öglorna inte tillämpas direkt på frågor med yttre sammanfogningar. Här måste vi införa villkorliga nedtryckta predikat som skyddas av flaggorna som slås på när en match har påträffats.

För det exemplet ser algoritmen med kapslad slinga ut med skyddade nedtryckta villkor så här :. I detta fall skyddas ett nedtryckt predikat också av en flagga som förhindrar kontroll av predikatet för den NULL-kompletterade raden som genereras av motsvarande yttre sammanfogningsoperation.

Åtkomst med nyckel från en inre tabell till en annan i samma kapslade koppling är förbjuden om den induceras av ett predikat från WHERE-tillståndet. Optimera SQL-uttalanden. Optimering av indexfusion. Optimering av motorns tillstånd. Indexvillkor Optimering av pushdown. Kapslad optimering av anslutning. Optimering av yttre anslutning.

Förenklad yttre anslutning. Läsoptimering för flera räckvidd. Konstant fällbar optimering. Funktion samtalsoptimering. Fönsteroptimering. Radkonstruktörens optimeringsuttryck. Undvik fullständiga bordssökningar. Optimera underfrågor med materialisering. Optimera frågor om prestationsschema. Optimera uttalanden om ändringar av data. Optimera databasprivilegier. Andra optimeringstips. Primär nyckeloptimering. Optimering av främmande nycklar. Index med flera kolumner.

Jämförelse av B-Tree och Hash-index. Optimizer Användning av genererade kolumnindex. Optimera databasstruktur. Optimera för karaktärs- och strängtyper. Optimera för många bord. Optimera för InnoDB-tabeller. Optimera InnoDB-frågor. Förstå planen för genomförande av frågan. Uppskatta frågeprestanda. Styr Query Optimizer. Kontroll av utvärdering av frågeplan.

Omkopplingsbara optimeringar. Mittpunkt införingsstrategi. Omstrukturera en nyckelcache. Cachning av förberedda uttalanden och lagrade program. Använda symboliska länkar för databaser på Unix. Använda symboliska länkar för databaser i Windows.

(с) 2019 most-popular.ru