Kui indeksi lisamine muudab asjad aeglasemaks
Sisust ja selle ülevaatamisest
Selles artiklis
Päevaarvude tabelil on üks võti: loendur ja kuupäev koos. Viis kohta koodis esitavad sellele teistsuguse küsimuse — mitte „see loendur aja jooksul“, vaid „kõik loendurid neil kuupäevadel“. Avalehe galerii, edetabel, saidikaart, 90-päevane diagramm ja olekunumbrid. Ilma kuupäevaveeru indeksita loeb iga neist kõiki 114 113 rida.
Selle indeksi lisamine muudab galerii kümme korda kiiremaks. Seda ei lisatud. Siin on mõõtmine, mis otsustas.
Üks päring läks palju kiiremaks
Galerii küsib loendureid, mis olid täna aktiivsed. Ilma kuupäeva indeksita skaneerib see kogu tabeli; indeksiga otsib see ühe kuupäeva ja loeb 443 rida. 61,5 millisekundist sai 6,1 millisekundit. See ei ole peen tulemus ja kui see oleks olnud ainus mõõdetu, oleks indeks praegu andmebaasis.
Kaks päringut läks aeglasemaks
Saidikaart küsib neljateistkümmet päeva ja sai 19% aeglasem. Olekunumbrid küsivad aastat ja said 10% aeglasemaks. Mõlemal juhul lülitus päringuplaneerija primaarvõtmelt uuele indeksile ja tegi halvema valiku.
Seda tasub mõista, sest see ei ole planeerija viga. Vahemiku lugemine sekundaarse indeksi kaudu tähendab, et indeksist leitakse sobivad read ja siis tuuakse igaüks tabelist. Kitsa lõigu puhul on see soodne tehing. Neljateistkümne päeva puhul kolmeteistkümnest kuust on see siiski palju ridu, mis tuuakse ükshaaval, ja tabeli sirge skaneerimine — lugemine füüsilises järjekorras, mida kettad ja vahemälud armastavad — võidab selle. Planeerija seda ei tea. See näeb vahemikku ja indeksit ning võtab selle.
Ei ole võimalust öelda „kasuta seda indeksit ainult galerii jaoks“. Indeks on kättesaadav igale päringule, mis veergu puudutab, ja planeerija kasutab seda kõikjal, kus selle hinnangud ütlevad. Ühe lisamine on muudatus igale tabeli päringule, mitte ainult sellele, mille jaoks see mõeldud oli.
Kokku: mitte midagi
Kõigi viie peale sai 555 millisekundist 524 millisekundit. See on 1,1× paranemine, mis väikese serveri puhul, mis neid lehti nagunii vahemälust teenindab, ei ole skeemimuudatust väärt.
90-päevane diagramm näib paranenud 9% võrra. Seda ei arvestata ja tasub öelda, miks. Iga päringut mõõdeti kolm korda: ilma indeksita, sellega, siis jälle ilma. Kui teine ilma indeksita käik ei lange esimese lähedale, oli erinevus masinas, mitte muudatuses. 90-päevase diagrammi puhul erinesid kaks ilma indeksita käiku 13,8% võrra — rohkem kui väidetav mõju. Seega see rida ei mõõda midagi ja seda esitatakse mitte millegina.
Kuidas seda mõõdeti ja miks see loeb
Mitte tegelikul tabelil. Skript kopeerib selle, töötab koopial ja kustutab koopia lõpus. Indeksi lisamine toodangutabelile, et näha, mis juhtub, töötab ainult üks kord ühe üllatuse kohta.
Päringud on päris, koodist võetud, sealhulgas liit loenduritabeliga. Selle testi varasem versioon kasutas lihtsustatud asendajat ja andis palju põnevama vastuse: kakskümmend korda kiirem. Lihtsustatud päring ei olnud midagi, mida tegelikult keegi käivitab.
Mis oleks arv olnud
Kui seda oleks mõõdetud tavapärasel viisil — võta päring, mis tundub aeglane, mõõda enne ja pärast — oleks vastus olnud „kümme korda kiirem, saada ära“. Indeks oleks läinud sisse, galerii oleks läinud kiiremaks, saidikaart ja olekuleht oleksid läinud aeglasemaks ja keegi poleks neid kahte ühendanud, sest keegi ei vaadanud neid.
See on selle üldine kuju. Jagatud infrastruktuuri muudatust ei saa hinnata juhtumi alusel, mis seda ajendas. Küsimus ei ole „kas see aitab seda, mida ma vaatan“, vaid „mis seda veel puudutab ja mis sellega juhtub“.
On versioon, mis võib töötada: indeks, mis kannab mõlemat veergu, kuupäev esimesena, nii et galeriile saab vastata ainult indeksist, ilma tabelisse tagasi minemata. See võib ka vältida planeerija ahvatlemist laiemate vahemike puhul. Seda ei ole mõõdetud, seega see ei ole soovitus — see on järgmine asi, mida koopiale panna.