Pengindeksan Magento hanya mirip dengan pengindeksan tingkat basis data dalam semangat. Seperti yang dinyatakan Anton, ini adalah proses denormalisasi untuk memungkinkan pengoperasian situs yang lebih cepat. Izinkan saya mencoba menjelaskan beberapa pemikiran di balik struktur database Magento dan mengapa pengindeksan diperlukan untuk beroperasi dengan cepat.
Dalam database MySQL yang lebih "tipikal", tabel untuk menyimpan produk katalog akan disusun seperti ini:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Ini cepat untuk pengambilan, tetapi meninggalkan masalah mendasar untuk perangkat lunak eCommerce:apa yang Anda lakukan ketika Anda ingin menambahkan lebih banyak atribut? Bagaimana jika Anda menjual mainan, dan bukan kolom ukuran, Anda memerlukan age_range
? Anda dapat menambahkan kolom lain, tetapi harus jelas bahwa di toko besar (misalnya Walmart), ini akan menghasilkan baris yang 90% kosong dan upaya mempertahankan atribut baru hampir tidak mungkin.
Untuk mengatasi masalah ini, Magento membagi tabel menjadi unit yang lebih kecil. Saya tidak ingin membuat ulang seluruh sistem EAV dalam jawaban ini, jadi terimalah model yang disederhanakan ini:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
Sekarang dimungkinkan untuk menambahkan atribut sesuka hati dengan memasukkan nilai baru ke dalam product_attributes
dan kemudian menempatkan catatan yang berdampingan ke dalam product_attribute_values
. Ini pada dasarnya apa yang dilakukan Magento (dengan sedikit lebih menghormati tipe data daripada yang saya tampilkan di sini). Faktanya, sekarang tidak ada alasan untuk dua produk memiliki bidang yang sama sama sekali, jadi kami dapat membuat seluruh jenis produk dengan set atribut yang berbeda!
Namun, fleksibilitas ini ada harganya. Jika saya ingin menemukan color
kemeja di sistem saya (contoh sepele), saya perlu menemukan:
product_id
item (dalam tabel produk)attribute_id
untukcolor
(dalam tabel atribut)- Akhirnya,
value
yang sebenarnya (dalam tabel nilai_atribut)
Magento dulu bekerja seperti ini, tetapi sangat lambat. Jadi, untuk memungkinkan kinerja yang lebih baik, mereka membuat kompromi:setelah pemilik toko menentukan atribut yang mereka inginkan, lanjutkan dan buat tabel besar dari awal. Ketika sesuatu berubah, nuke dari luar angkasa dan buat lagi. Dengan begitu, data disimpan terutama dalam format fleksibel kami yang bagus, tetapi ditanyakan dari satu tabel.
Tabel pencarian yang dihasilkan ini adalah "indeks" Magento. Saat Anda mengindeks ulang, Anda meledakkan tabel lama dan membuatnya kembali.
Semoga itu bisa memperjelas segalanya!
Terima kasih, Joe