Oireet
Oletetaan, että taulukko, jossa käytetään johdannaispoistoon määritettyä viiteavainrajoitusta, ja viiteavainsarakkeen tilastot eivät kata koko taulukon avainarvojen aluetta (esimerkiksi: koska tilastoja ei päivitetty, kun tietojen jakaminen on tehnyt muutoksia taulukkoon). Tässä skenaariossa, kun yrität poistaa rivin, joka vastaa avainarvoa, jota ei ole esitetty tilastoissa, ja kyselyn optimointitoiminto käyttää oletusarvoista kardinaliteetin arviointia, poistotoiminto on odotettua hitaampi. Saatat myös huomata, että hakemistoskannauksen avulla voidaan etsiä vastaavat rivit viitetaulukosta.
Tila
Microsoft on varmistanut, että tämä on ongelma Koskee-osassa luetelluissa Microsoft-tuotteissa.
Ratkaisu
Tämä ongelma on korjattu seuraavissa SQL Serverin kumulatiivisissa päivityksissä:
Huomautus: Tämä korjaus on käytössä vain, kun otat optimizer-hotfix-korjaukset käyttöön (joko tietokannan laajuuden määritysvaihtoehdon, kyselyn vihjeen tai seurantamerkintä 4199:n kautta).
Tietoja SQL Serverin kumulatiivisista päivityksistä:
Jokainen sql Serverin uusi kumulatiivinen päivitys sisältää kaikki hotfix-korjaukset ja kaikki edellisen kumulatiivisen päivityksen sisältämät suojauskorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:
Vaihtoehtoinen menetelmä
Voit kiertää tämän ongelman käyttämällä jotain seuraavista menetelmistä:
-
Käytä vanhan kardinaliteetin arviointia. Lisätietoja on kohdassa Kardinaliteetin arviointi (SQL Server).
-
Poista johdannaispoisto viiteavainmäärityksestä ja suorita poistotoiminto käyttämällä LIITOS-toimintoa pää- ja alitaulukoiden välillä johdannaispoistoa vastaavan poiston suorittamiseksi.
-
Päivitä päätaulukon tilastot FULLSCAN-ohjelmalla ennen tietojen poistamista.
Lisätietoja
Lue lisää Microsoftin käyttämästä terminologiasta ohjelmistopäivitysten kuvaileessa.