..
Ensimmäinen ratkaisu on käyttää Osallistu kyselyyn suoraan, uudelleenkirjoitus seuraavasti
SELECT PC.LastName +''+ PC.FirstName [Asiakkaan nimi]
, SC.CustomerType
FROM Sales.Customer SC
LEFT ulkoliitos KYLLÄ Sales.Individual
ON = SC.CustomerID SI.CustomerID
LEFT ulkoliitos Person.Contact PC
ON = SI.ContactID PC.ContactID
Tässä toisessa versiossa en yksinkertaisesti käyttää taulukoita toiminto GetName asetat ne FROM lauseke. Olen myös korvata funktiokutsun GetName luetteloon sarakkeita SELECT suoraan yhdistämällä kaksi saraketta Yhteystiedot taulukkoon.
Tässä mitä kuvaus kertoo suorittaminen kysely

Kuten näette huolimatta lukuisista kehotuksista edellinen versio kyselyn, uusi versio on yksi puhelu mikä tietysti tarkoittaa, iso säästö suorituskyvyn.
Katsotaanpa nyt, mitä tapahtuu muuntamalla alkuperäinen skalaari toiminto GetName on funktio, joka palauttaa taulukon sijasta (inline taulukko). Luo ensin toiminto ja denominiamola GetNameTable
CREATE FUNCTION GetNameTable (@ Asiakastunnus int) PALAUTUS TAULUKKO AS (RETURN SELECT Sukunimi + "," + Etunimi [Asiakkaan nimi] FROM Sales.Customer SC LEFT ulkoliitos KYLLÄ Sales.Individual ON = SC.CustomerID SI.CustomerID LEFT ulkoliitos Person.Contact PC ON = SI.ContactID PC.ContactID WHERE Asiakastunnus = @ SC.CustomerID )
Kuten näette kyselyn että otteet data on sama kuin skalaari toiminnon GetName, ainoa ero on, että funktio palauttaa taulukon GetNameTable sijaan varchar arvosta. Voit käyttää tätä uutta ominaisuutta hän käyttää on tarpeen käyttää CROSS KOSKE operaattori seuraavasti
SELECT I. [Asiakkaan nimi]
, SC.CustomerType
FROM Sales.Customer SC
CROSS KOSKE GetNameTable (SC.CustomerID)
Tällöin tuloksena Seuraavat Profiler

Otetaan viimeinen esimerkki siitä, miten kirjoittaa alkuperäisen kyselyn tehokkaammin. Tällä kertaa luomme ja käyttää seuraavia näkymä
CREATE VIEW View_GetName
AS
SELECT Sukunimi + "," + Etunimi [Asiakkaan nimi]
, SC.CustomerID
FROM Sales.Customer SC
LIITY Sales.Individual
ON = SC.CustomerID SI.CustomerID
LIITY Person.Contact PC
ON = SI.ContactID PC.ContactID
GO
Tämän perusteella View voimme kirjoittaa kyselyn seuraavasti
V. SELECT [Asiakkaan nimi]
, CustomerType
FROM Sales.Customer SC
LEFT ulkoliitos View_GetName V
ON SC.CustomerID Asiakastunnus = R.
Tällöin tuloksena Profiler on sama kuin kahden edellisen esimerkkiä. Nämä kolme esimerkkiä vastaavat vaikka esitellä pieniä eroja suorituskyvyssä. Tehokkain lähestymistapa on CROSS JOIN mikä hieman pienempi suorittimen käyttöä (voit nähdä tiedot Profiler).
Nämä esimerkit tuodaan esille, että käyttö skalaarifunktioita luettelossa sarakkeet SELECT tai WHERE on tehoton käytäntö. Kielteisiä vaikutuksia tästä käytännöstä on suoraan verrannollinen tietomäärän poimittuja kyselyitä käytetään. Kun käytetään tällä tavoin, skalaarifunktioita käyttäytyä kuin osoitin, joka on toistuvasti vaatinut, ja sitten painaa alas Kehitämme ohjeita. Jos siis käytetty joissakin kyselyt pidetään skalaarifunktioita kirjoittaa sama yhdessä ehdotettua vaihtoehtoa.
Samat kuin tässä artikkelissa ovat vain joitakin mahdollisia toimenpiteitä parantaakseen suorituskykyä t-SQL-kyselyjä ja muita hyödyllisiä laitteita keskustellaan tulevissa artikkeleissa.
| |
MS Access Course
Opettele luoda ja hallita tietokantoja helposti ja nopeasti. Alkaen 29 €. |
| |
Kurssin MySQL
Hallinta avoimen lähdekoodin tietokanta. Alkaen 39 €. |
| |
Opiskelun avuksi ja SQL
Luominen ja hallinta relaatiotietokantojen. Alkaen 39 €. |