7.1 Alesan kanggo munculé indeks
Bab liyane sing penting tanpa ana database ora ana indeks.
Mbayangno kahanan sing ana 10 yuta pangguna ing tabel pangguna , lan sampeyan pengin nampilake saben wong sing duwe level ndhuwur 90. Pitakonan iki gampang banget kanggo nulis:
SELECT * FROM user WHERE level > 90
Apik, kita nulis panjaluk kasebut kurang saka siji menit. Lan suwene wektu kanggo nglakokake pitakon iki saka server SQL? Kanggo nglakokake pitakon kasebut, dheweke kudu ngliwati 10 yuta cathetan, lan sanajan mung ana siji rekaman, butuh wektu akeh.
Kepiye carane nindakake tugas sing padha ing Jawa? Pisanan kita bakal ngurutake koleksi pangguna miturut level, banjur kita bisa nemokake cathetan sing dibutuhake kanthi cepet nggunakake telusuran binar. Muga-muga aku ora perlu nerangake apa iku?
Apik, nanging kepiye yen saiki kudu milih pangguna sing tanggal registrasi sadurunge 2020? Urut maneh miturut tanggal registrasi lan gunakake telusuran binar.
Ya, yen kita nindakake panyaring ing sawetara lapangan, lan ora mung sepisan, nanging asring, mula bakal migunani banget kanggo nyimpen data sing diurutake miturut lapangan iki.
Lan carane nyimpen data sing diurutake bebarengan karo macem-macem lapangan?
Lan jawabane gampang banget - sampeyan ora kudu nyimpen data kasebut dhewe, nanging indekse ing sawetara tabel global.
Sebutake ana 10 pangguna kanthi id: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
.
Lan sampeyan mutusake kanggo ngurutake miturut level, banjur susunan id kasebut, umpamane, kaya iki: {9, 2, 3, 1, 5, 4, 8, 6, 7, 10}
.
Lan yen kita ngurutake miturut tanggal, banjur entuk, contone {10, 1, 8, 7, 2, 3, 5, 9, 6}
:.
Array saka id kasebut diarani indeks . Unsur dhewe gedhe, kita ora ndemek. Ing Jawa, kita ora ndemek obyek, nanging nyimpen referensi; ing SQL, kita ora ndemek string nyata, nanging nyimpen nomer.
Ayo kula nulis maneh iki ing kode Jawa:
List<String> list = List.of("A", "C", "B", "Z", "Cc", "Bb", "Zz", "Y"); //this is a list of objects
List<String> alphabeticsList = new ArrayList(list);
Collections.sort(alphabeticsList); //collection sorted alphabetically
List<String> lengthList = new ArrayList(list);
Collections.sort(lengthList, lengthComparator); //collection sorted by string length
Ngurutake koleksi ora ateges mindhah unsur sing nyata. Koleksi kasebut ora nyimpen obyek nyata, nanging nyambungake. Padha bener kanggo tabel SQL. Garis nyata ngapusi awake dhewe lan ngapusi.
Lan nalika kita kudu kerep nggawe pilihan kanggo sawetara lapangan, banjur kita nambah indeks liyane kanggo meja (analog karo koleksi anyar ing Jawa) lan ngurutake larik meja, nyimpen urutan sing diurutake ing file indeks khusus.
Muga-muga perbandingan Jawa bisa mbantu sethithik. Praktek sethithik - lan kanggo sampeyan, panggunaan indeks uga bakal dadi solusi sing paling jelas.
7.2 Nambah indeks menyang tabel
Indeks bisa langsung ditemtokake nalika nggawe tabel, utawa ditambahake sawise. Paling asring, skenario kapindho sing kedadeyan - indeks ditambahake nalika ukuran tabel mundhak lan sampling data saya mudhun.
Nambah indeks menyang tabel gampang banget:
ALTER TABLE table
ADD INDEX index_name (column);
Yen sampeyan kerep golek cathetan ing sawetara kolom bebarengan, sampeyan bisa nemtokake indeks gabungan: SQL nggunakake sawetara kolom kanggo nyipta.
Nambah indeks gabungan menyang tabel uga gampang banget:
ALTER TABLE table
ADD INDEX index_name (column 1, column 2, column 3, ...);
Indeks njupuk akeh ruang disk, dadi yen sampeyan ora perlu indeks maneh, sampeyan bisa tansah mbusak:
ALTER TABLE table
DROP INDEX index_name;
Indeks kasebut minangka bagean saka database sing rada didhelikake. Dheweke ora mengaruhi format pitakon pitakon kanthi cara apa wae. Iku mung sing ngarsane nyepetake sampling data lan slows mudhun tambahan lan serep.
Nanging ngelingi carane penting kacepetan ing donya saiki lan carane murah papan disk, aran gratis kanggo nambah indeks kanggo kabeh kesempatan. Ngapunten admin...
GO TO FULL VERSION