Kur shtimi i një indeksi i ngadalëson gjërat
Për përmbajtjen dhe kontrollin e saj
Në këtë artikull
Tabela e shifrave ditore ka një çelës: numëruesin dhe datën së bashku. Pesë vende në kod bëjnë pyetje tjetër — jo „ky numërues gjatë kohës“, por „të gjithë numëruesit në këto data“. Galeria e faqes kryesore, renditja, harta e uebsajtit, një grafik 90-ditor dhe shifrat e gjendjes. Pa indeks mbi kolonën e datës, secila lexon të gjithë 114 113 rreshtat.
Shtimi i atij indeksi e bën galerinë dhjetë herë më të shpejtë. Nuk u shtua. Ja matja që e vendosi.
Një kërkesë u bë shumë më e shpejtë
Galeria kërkon numëruesit aktivë sot. Pa indeks mbi datën skanon gjithë tabelën; me indeks kërkon një datë të vetme dhe lexon 443 rreshta. 61,5 milisekonda u bënë 6,1. Ky nuk është rezultat i padukshëm dhe, po të ishte matur vetëm kjo, indeksi tani do të ishte në bazën e të dhënave.
Dy kërkesa u ngadalësuan
Harta e uebsajtit kërkon katërmbëdhjetë ditë dhe u ngadalësua me 19%. Shifrat e gjendjes kërkojnë një vit dhe u ngadalësuan me 10%. Në të dy rastet planifikuesi i kërkesave kaloi nga çelësi parësor te indeksi i ri dhe bëri zgjedhje më të keqe.
Kjo pjesë ia vlen të kuptohet, sepse nuk është gabim i planifikuesit. Leximi i një intervali përmes indeksit dytësor kërkon gjetjen e rreshtave përkatës në indeks dhe pastaj marrjen e secilit nga tabela. Për një pjesë të ngushtë ia vlen. Për katërmbëdhjetë ditë nga trembëdhjetë muaj, mbeten shumë rreshta të marrë një nga një dhe skanimi i drejtpërdrejtë i tabelës — leximi sipas rendit fizik, që u përshtatet disqeve dhe memories së ndërmjetme — e mund. Planifikuesi nuk e di këtë. Sheh interval dhe indeks dhe e zgjedh.
Nuk ka mënyrë të thuhet „përdore këtë indeks vetëm për galerinë“. Indeksi është i disponueshëm për çdo kërkesë që prek kolonën dhe planifikuesi do ta përdorë kudo ku vlerësimet i thonë se duhet. Shtimi i tij ndryshon çdo kërkesë në atë tabelë, jo vetëm atë për të cilën ishte menduar.
Së bashku, asgjë
Në të pesta, 555 milisekonda u bënë 524. Përmirësim 1,1×, që në një server të vogël ku këto faqe gjithsesi shërbehen nga memoria e ndërmjetme nuk ia vlen ndryshimin e skemës.
Grafiku 90-ditor duket se u përmirësua me 9%. Nuk përfshihet dhe ia vlen të thuhet pse. Çdo kërkesë u mat tri herë: pa indeks, me të, pastaj sërish pa të. Nëse ekzekutimi i dytë pa indeks nuk del afër të parit, ndryshimi erdhi nga makina, jo nga ndërhyrja. Për grafikun 90-ditor, dy ekzekutimet pa indeks ndryshuan me 13,8% — më shumë se efekti i pretenduar. Prandaj ai rresht nuk mat asgjë dhe raportohet si i tillë.
Si u mat dhe pse ka rëndësi
Jo në tabelën aktive. Skripti e kopjon, punon mbi kopje dhe e heq kopjen në fund. Shtimi i një indeksi në tabelë prodhimi për të parë çfarë ndodh funksionon vetëm një herë për çdo befasi.
Kërkesat janë të vërtetat, të marra nga kodi, përfshirë bashkimin me tabelën e numëruesve. Një version i mëparshëm i testit përdorte zëvendësues të thjeshtuar dhe dha përgjigje shumë më emocionuese: njëzet herë më shpejt. Kërkesën e thjeshtuar nuk e ekzekuton realisht asgjë.
Çfarë do të kishte qenë shifra
Po të ishte matur në mënyrën e zakonshme — merre kërkesën që duket e ngadaltë, mat kohën para dhe pas — përgjigjja do të ishte „dhjetë herë më shpejt, publikoje“. Indeksi do të shtohej, galeria do të përshpejtohej, harta e uebsajtit dhe faqja e gjendjes do të ngadalësoheshin dhe askush nuk do t'i lidhte, sepse askush nuk i vëzhgonte ato.
Ky është modeli i përgjithshëm. Ndryshimi në infrastrukturë të përbashkët nuk mund të vlerësohet vetëm mbi rastin që e nxiti. Pyetja nuk është „a e ndihmon këtë që shoh“, por „çfarë tjetër e prek këtë dhe çfarë i ndodh asaj“.
Ka një version që mund të funksionojë: indeks me të dyja kolonat, datën të parën, që galeria të marrë përgjigje vetëm nga indeksi pa u kthyer te tabela. Mund të shmangë edhe tundimin e planifikuesit për intervalet më të gjera. Kjo nuk është matur, prandaj nuk është rekomandim — është gjëja e radhës për t'u provuar në kopje.