Maraqlı cavabdır ))
Salam,
ENUM'un meqsedi esasen datanin daha compact saxlanmasidir. Misalcun 14 milyon setirlik cedvelde bir sutunda "isleyir" yada "islemir" yazilsaydi, onda bu field cox boyuk yer tutardi, onun yerine o sutuna ENUM("isleyir","islemir") yaradib o sekilde istifade olunsa onda bu iki soz ucun iki id yaradilir ve sutunda o id yazilir. Bu da datanin boyukluyunun ciddi sekilde azalmasi demekdir. ENUM'un isleyis mentigi bu sekildedir.
Indi baxaq, sizin sualda ENUM bize performans terefde nese qazandiracaq? yox.
Gelek index meselesine bu sutunu indexlesek yaxsi netice almaq olar ? yox. niye ? cunku indexlesen bele 14 milyonluq cedvelde id'si 1 olan 5 milyon setir olacaq. demeli bu sutuna index atmaq da ele yaxsi variant deyil.
Bes neyniyek ? SQL sorgusunda bu sutundan basqa hansi sutunu istifade edirsiz ? bax onu indexlemek lazimdir. Misalcun:
SELECT * FROM hede WHERE id=2 and cat_id=2903;
Sorgu buna benzerdise birinci is cat_id'ye index qoymagdir. Lap bomba oglansansa, sorgularin ucmagini isteyirsense onda da (cat_id,id) ikisine birden index goymag lazimdi. Diqqet! ikili index'de de cat_id qabaqda yazilir, niye ? ele yuxardaki sebeblere gore.
Sizin yazdığınız SQL sorğularında şərt qoyulmuş sütunlar üzrə indekslər var? Yoxdursa, yaradın, varsa, həmin indekslərin sql sorğusunda istifadə olunduğunu yoxlayın.
Bu sual bir dəfə verilib.
http://cavablar.net/2011/09/05/sql/
DBMS MS SQL Server-dirsə, İtzek Ben-Gan-in bu movzuda super kitabları var. Apres nəşriyatın da SQL Server 2008 Query Performance Tuning Distilled adlı kitabı var.