SORU
9 HAZİRAN 2010, ÇARŞAMBA


Nasıl bir MySQL tablo için bir dizin eklemek için?

Veri yaklaşık 150,000 satır ile çok büyük bir MySQL tablo var. Ben denemek ve çalıştırmak şu anda

SELECT * FROM table WHERE id = '1'; 

kod ID alanı birincil indeks olarak iyi çalışır. Ancak, son zamanlarda bir proje geliştirme için, başka bir alana göre veritabanında arama yapmak zorundayım. Örneğin

SELECT * FROM table WHERE product_id = '1';

Bu alan bir dizin olarak ekledim, ancak, önceden oluşturulmuş oldu ama yukarıdaki sorguyu çalıştırmak için çalıştığınızda, sonuçlar çok yavaş. Bir sorgu zaten bir tane ekledim ne zaman product_id alanı için dizin yok olduğunu ortaya koymaktadır AÇIKLAMAK ve sonuç olarak sorgu herhangi bir yerde 30 dakika 20 dakika tek bir satır döndürür.

DÜZENLEME:

Tam AÇIKLAMAK benim sonuçlar şunlardır:

| id | select_type | table | type | possible_keys        | key  | key_len | ref  | rows      | Extra       |
 ---- ------------- ------- ------ ---------------------- ------ --------- ------ ------ ------------------ 
|  1 | SIMPLE      | table | ALL  | NULL                 | NULL | NULL    | NULL |    157211 | Using where |
 ---- ------------- ------- ------ ---------------------- ------ --------- ------ ------ ------------------ 

EDİT2:

Sadece bir göz attık unutmayın için yararlı olabilir ve KİMLİĞİ alanı PRODUCT_İD alanı VARCHAR olarak saklanır, ancak İNT olarak saklanır. Bu sorunun kaynağı olabilir mi?

CEVAP
9 HAZİRAN 2010, ÇARŞAMBA


ALTER TABLE `table` ADD INDEX `product_id` (`product_id`)

Hiç mysql strings integer karşılaştırın. id = ** 11 tırnak işaretleri kaldırın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DJPixcell

    DJPixcell

    20 NİSAN 2007
  • JamesAtiPhone

    JamesAtiPhon

    16 EYLÜL 2010
  • PlayStation

    PlayStation

    16 Aralık 2005