Vroeg in de toepassing ontwikkeling van het systeem-, database-gegevens van minder als ontwikkelaars, om de query SQL statements, complexe oog op de voorbereiding, Gang begon niet begrijpen van de tekst van de verschillende SQL-Chu 语句 methode geëvalueerd Danshi als Jiang toepassing Tijiao praktische toepassing, Suimet de toename van de gegevens in de database, het systeem reactiesnelheid van het systeem moet worden bij het oplossen van een van de belangrijkste onderwerpen.Optimalisering van het systeem is een zeer belangrijk aspect van het optimaliseren van SQL statements.Voor de enorme hoeveelheden data, slechte kwaliteit SQL-statements en SQL-instructie het snelheidsverschil tussen de tijden tot de shows voor een systeem is niet eenvoudig om achieve its function op, maar van hoge kwaliteit SQL statements write, verbetering van het systeembeschikbaarheid.
In de meeste gevallen, Oracle maakt gebruik van de index tot een sneller doorlopen tafel, de optimizer voornamelijk gebaseerd op de definitie van de index om de prestaties te verbeteren.Echter tot een index als de SQL-statement waar clausule is onredelijk om SQL-code te schrijven, zal zij de optimizer cause use door het verwijderen van de full table scan usually, op zulk een SQL-instructie, bekend als de slechte kwaliteit van de SQL-instructie.In de voorbereiding van SQL-statements moet duidelijk zijn dat de beginselen die zijn aangenomen door de optimizer aan de index, die helpt schrijf snelheid van de SQL-statement te verwijderen.
De volgende SQL-instructie waarin bepaalde clausule van de voorbereiding van de problemen die moeten aandacht besteden aan details.In die clausule waar, zelfs als sommige kolommen indexen hebben, maar vanwege de slechte voorbereiding van SQL, het systeem is de SQL-instructie kan geen gebruik maken van de index draait, maar maakt ook gebruik van full table Scan, dat leidde tot de extreme snelheid van de reactiegrote daling.
1. IS NULL en IS NOT NULL
Index kan niet leeg zijn voor elke kolom null-waarden bevat zal niet worden opgenomen in de index.Zelfs indien de index van de wijze waarop van de gevallen zo lang als deze kolommen hebben een met nul, zal de kolom worden uitgesloten van de index.Dit betekent dat als er een null-kolom, zelfs als de constructie van de index van de kolom niet zal verbeteren.
Elk gebruik where is null of niet nul verklaring Optimizer is niet toegestaan om de index te gebruiken.
2. Join kolom
Voor de aansluiting van de kolom, zelfs indien de verbinding waarde van een statische waarde zal de optimizer geen gebruik maken van de index.Ons kijken naar een voorbeeld, aannemen dat een vakbond tabel (werknemer nu), voor een werknemer van de voor-en achternaam in twee opslag (FIRST_NAME en achternaam), de zogenaamde Bill een query. Clinton (Bill Cliton) werknemers.
Het volgende is een join query met behulp van SQL statements,
Boven, kan deze verklaring check out of Bill Cliton het personeel, maar er behoefte is aan aandacht te besteden aan het systeem optimizer naar een index op basis van achternaam wordt niet gebruikt te maken.
Bij gebruik van de volgende SQL-instructie om dit te schrijven, Oracle systeem kan u een index op basis van achternaam.
Ontstonden naar aanleiding van de behandeling van deze situatie? Als een variabele (naam) opgeslagen in de Bill Cliton de naam van de werknemer, voor deze situatie, hoe kunnen we de hele traverse te voorkomen, met behulp van de index is? Kan een functie, de variabele naam te gebruikenDe eerste en laatste naam kan worden gescheiden, maar er is een ding om op te merken, deze functie is niet de rol van de index kolom.Hier is SQL-query script:
3. Met wildcard (%) van het soortgelijke verklaring
Net zoals het voorbeeld hierboven.De huidige vraag is zodanig, verplichten de werknemers om de tafel naamquery bevat cliton mensen.Kan gebruik maken van SQL-query de volgende verklaring:
Hier een wildcard (%) in de eerste zoekterm verschijnt, zodat het systeem maakt geen gebruik van Oracle last_name index.In veel gevallen wellicht niet in staat om deze situatie te vermijden, maar we moeten de geest met de bodem, wildcard queries dergelijk gebruik zal de snelheid te verminderen.Echter, toen de wildcard in een reeks van andere locaties, de index optimizer kan gebruiken.
4. Bestellen door de verklaring van
ORDER BY statement, Oracle bepaalt hoe query resultaten te sorteren geretourneerd.Bestel door de verklaring op de kolom om te sorteren, zonder bijzondere beperkingen, kan ook dienst doen om een kolom (zoals de link of vastgemaakt, enz.).Bestellen van een verklaring of een verslag van niet-geïndexeerde items zal de query rate expressie.
Zorgvuldig onderzocht om de bestelling door de verklaring of de uitdrukking van de niet-geïndexeerde objecten te identificeren, zullen ze de prestaties verminderen.Wen Ti van de manier waarop dit op te lossen is om de bestelling te herschrijven door de verklaring van de index te gebruiken, kunt u de kolom gebruiken voor wat de inrichting Lingwai een index, waarbij Juedui voorkomen 在 ORDER BY-clausule in het gebruik van de uitdrukking.
5. NIET
We controleren vaak wel een zekere logica te gebruiken in de WHERE clausule expressie, zoals groter dan, kleiner dan, gelijk en niet gelijk zijn, enz., je kan gebruiken en (met), of (of) en niet (niet).NIET kan worden gebruikt om te controleren tegen elke logische symbolen.
Als u wilt niet gebruiken, moeten worden genegeerd zinnen in te voegen tussen haakjes, en de toevoeging van de woorden NIET operator.NIET operator is opgenomen in een andere logische operator, dit is niet gelijk aan ( ) operator.Met andere woorden, zelfs als ze niet in de query WHERE clausule expliciet toevoeging van het woord niet, niet in de nog operator.
Op deze query, kunt u geen gebruik te herschrijven zodat NIET:
Hoewel de resultaten van de twee onderzoeken hetzelfde, maar de tweede query-programma query-programma sneller zal groeien dan de eerste meer worden.De tweede query om Oracle naar de index te gebruiken op het salaris kolom, de eerste zoekopdracht kan geen gebruik maken van de index.
6. IN en bestaat
Soms is een bepaalde serie wordt een en ten opzichte van de waarde.De makkelijkste manier is om te gebruiken in de WHERE clausule subquery.In de where clausule kunnen twee formaten subquery gebruiken.
De eerste vorm is het gebruik van de IN-operator; tweede formaat is het gebruik van het bestaande operator.
Ik geloof dat de meeste mensen zullen de eerste vorm te gebruiken, omdat het relatief gemakkelijk is om te schrijven, maar eigenlijk is de tweede formaat naar een formaat dan de eerste hoge efficiëntie.In Oracle kunt u bijna alle van de in operator aan de EXISTS gebruik subquery herschrijven sub-query.
Het tweede model, de sub-query ', selecteer' X 'te starten.Of het gebruik van de clausule EXISTS subquery welke gegevens uit de tabel alleen zien waar clausule.Deze optimizer hoeft niet dwars door de hele tafel, maar alleen het werk kan worden afgerond volgens de index (in deze verklaring gaat ervan uit dat wanneer er een index in de kolom).Ten opzichte van de IN clausule is, bestaat sub-query met gekoppelde, de bouw-up moeilijker dan het in subquery.
Door het gebruik van bestaan, Oracle systeem zal eerst de belangrijkste vraag, sub query en voer tot hij de eerste wedstrijd, wat tijd bespaart.Oracle-systeem bij de uitvoering van de IN subquery, de eerste uitvoering van de sub-vragen, en opgeslagen in de lijst van de behaalde resultaten in een tijdelijke verhoging van de index tafel.Vóór de uitvoering van sub-queries, het systeem eerste grote onderzoek in afwachting van, naar sub-query is voltooid, wordt opgeslagen in een tijdelijke tabel in een later tijdstip voor meer informatie.Dit wordt meestal gebruikt bestaat in queries dan met behulp van de snelheid redenen.
Tegelijkertijd zoveel mogelijk niet bestaat gebruiken in plaats van niet in, hoewel beide gebruik van de NOT (kan geen gebruik maken van de index en een lagere snelheid), niet bestaat efficiënter dan de NIET IN query.