[]

Bu index işini çözemicem galiba (mysql)

Tablolarımı ve yaptığım sorguları güzelce anlatayım ben.

Ana tablom: (bir tane dışında tüm sorgular bunun üstünden yürüyor)

kitap-yazar-yayinevi-fiyat-iskonto-resim-aciklama vs.

diye giden bir tablo.
buradaki kitap-yazar-yayinevi sütunlarının değerleri, bunlara ait özel tablodaki id'lerden oluşuyor. yani int değeri alıyor bunlar. 23, 46, 2100 vs.

alt tablolarım:
kitaplar tablosu: id ve kitap kolonlarından oluşuyor. buradaki id, "kitaplar" tablosundaki "kitap" değerine karşılık geliyor, "kitap" kolonu ise "text" değerinde kitap isimlerini içeriyor.

yazarlar ve yayinevleri tablosunun da mantığı birebir aynı o yüzden onları da ayrı ayrı anlatmıyorum.

Tablolar canlanmıştır sanırım.
Şimdi, benim 2 adet sorgu türüm var.
1. sorgu türüm, insanlar sitenin sayfasına eriştiğinde kitapları sondan başa doğru sıralamayı sağlayan klasik bir join sorgusu:

"SELECT k.isbn, k.kitap as id, k.baski_yili, k.aciklama, k.yazar as yazar_id, k.yayinevi as yayinevi_id, k.fiyat, k.indirim, k.resim_link, y.yazar, ye.yayinevi, ki.kitap FROM kitaplar AS k
INNER JOIN yazarlar AS y ON y.id=k.yazar
INNER JOIN yayinevleri AS ye ON ye.id=k.yayinevi
INNER JOIN kitap_id as ki on ki.id=k.kitap
where k.resim_link!='www.finalpazarlama.com' and k.yayinevi='".$myyayinevi."'
order by k.baski_yili " (burada çok karışık gözüküyor olabilir, eğer bu kodu düzenli paylaşabileceğim bir site varsa editlerim bu kısmı)

Görüldüğü gibi bu sorguda işler id'ler üstünden yürüyor ve ana tablom kitap. Kitaplardaki değerleri alıp, alt tablolardaki id'ler ile eşleştiriyor yani.

2. sorgu tipim ise, bizim "admin"de kitapları aramamızı ve değiştirmemizi sağlayan "arama" sorgusu.

Bunda ise ana tablom, "alt" tablolar dediğim isim ve idlerin bulunduğu tablolar. Oradaki isimlerle eşleştirip, id'yi alıp ana tablomdaki ilgili satırları göstertiyor.

"SELECT k.isbn, k.kitap as id, k.baski_yili, k.isbn, k.yazar as yazar_id, k.yayinevi as yayinevi_id, k.fiyat, k.indirim, k.resim_link, y.yazar, ye.yayinevi, ki.kitap FROM kitaplar AS k
INNER JOIN yazarlar AS y ON y.id=k.yazar
INNER JOIN yayinevleri AS ye ON ye.id=k.yayinevi
INNER JOIN kitap_id as ki on ki.id=k.kitap
where y.yazar like '%".$ara."%' or ye.yayinevi like '%".$ara."%' or ki.kitap like '%".$ara."%' or k.isbn='".$ara."'
order by k.baski_yili desc"


Yani 2. tablomda, "text" sütunlarına "like" ile sorgu yaptırıyorum.
Şimdi, indexlere falan biraz baktım internette. Ama bir türlü nasıl indexlemeler yapacğaımı mantığa oturtamadım. Özellikle text'te kafam baya bir karıştı.

Özellikle ama özellikle şu 2. sorgu türü için en uygun indexleme ne olur, nasıl olur çözemedim. Cidden yardımınıza ihtiyacım var. Yardım edebilirseniz çok sevinirim.

 
Contains şeklinde search yaparsan indexlemenin bi anlamı yok. StartsWith şeklinde aratırsan ilgili fieldlarına göre indexleyebilirsin. "%ara%" değil de "ara%" şeklinde yani.

İlla Contains diye aratman lazımsa ve bir performans geliştirme yapman gerekiyorsa database yapısını değiştirmen biraz google'laşman lazım. Ama "Early optimization is the root of all evil" diye bir atasözü var. Eğer amazon değilsen gerek yok indexe falan.
  • kta  (25.10.13 10:48:02) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.