Ben bir sitede bir arama olarak bir MySQL sorgusu çalıştırmak için çalışıyorum ve sadece uzun bir zaman alıyor.
Ben phpMyAdmin doğrudan onu koştu ve onu tamamlamak için yaklaşık 20 saniye sürdü.
İşte ben çalıştırıyorum sorgu:
SELECT * , bb_business.id AS bid
FROM bb_business
LEFT OUTER JOIN bb_offers ON bb_business.id = bb_offers.store_id
LEFT OUTER JOIN bb_cat_business ON bb_business.id = bb_cat_business.store_id
LEFT OUTER JOIN bb_categories ON bb_categories.id = bb_cat_business.cat_id
WHERE bb_business.active = '1'
AND (
bb_business.business_name LIKE '%altas%'
OR bb_categories.category_name LIKE '%altas%'
OR bb_business.business_name LIKE '%juice%'
OR bb_categories.category_name LIKE '%juice%'
)
AND (
bb_business.city LIKE '%%'
OR bb_business.state LIKE '%%'
OR bb_business.zip LIKE '%%'
)
GROUP BY bb_business.business_name
ORDER BY bb_business.business_name DESC
LIMIT 1 , 10`
Hız: satırları gösteriliyor 0 - 0 (1 toplam, Sorgu aldı 20,1130 sn)
Sana yapısını göstermek için en iyi yolu, emin değilim. Ama burada bazı tabloların harmanlama için bir kopyalama ve yapıştırma:
bb_ach 128 InnoDB latin1_swedish_ci 32.0 KB -
bb_business 2,862 InnoDB latin1_swedish_ci 1.6 MB -
bb_categories 15 MyISAM utf8_general_ci 6.7 KB 60 Bytes
bb_cat_business 2,926 MyISAM utf8_general_ci 49.6 KB 17 Bytes
bb_emails 13 MyISAM utf8_general_ci 6.0 KB -
bb_member 409 MyISAM utf8_general_ci 62.7 KB -
bb_member_card 593 MyISAM utf8_general_ci 112.1 KB -
bb_merchant 154 InnoDB latin1_swedish_ci 32.0 KB -
bb_offers 80 InnoDB latin1_swedish_ci 16.0 KB -
bb_products 2 InnoDB latin1_swedish_ci 32.0 KB
Başka bir şey sağlayabilir. Lütfen bana bildirin.
Herhangi bir yardım için çok teşekkür ederim.
DÜZENLEME # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Tamam, OMG Midilli öneri kullanarak, ben bir kaç şey değişmiş. Bazı şeyler MyISAM yapılmış ve kullanmak için birkaç FULLTEXT indeksleri yarattı.
Ben bu sorgu ile sona erdi:
SELECT *, bb_business.id AS bid FROM bb_business
LEFT OUTER JOIN bb_offers ON bb_business.id = bb_offers.store_id
LEFT OUTER JOIN bb_cat_business ON bb_business.id = bb_cat_business.store_id
LEFT OUTER JOIN bb_categories ON bb_categories.id = bb_cat_business.cat_id
WHERE bb_business.active = '1' AND
MATCH(bb_business.business_name) AGAINST ('".addslashes($business)."') OR
MATCH(bb_categories.category_name) AGAINST ('".addslashes($business)."') OR
MATCH (bb_business.city,bb_business.state,bb_business.zip) AGAINST ('".addslashes($city)."')
GROUP BY bb_business.business_name
ORDER BY bb_business.imported,".$this->sortCol." ".$this->sortDirection." LIMIT ".$this->start.",".$this->limit
Ben onu daha yavaş yaptığımı düşünüyorum ;)
İZAH Bu verir:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE bb_business ALL NULL NULL NULL NULL 2877 Using temporary; Using filesort
1 SIMPLE bb_offers ALL NULL NULL NULL NULL 94
1 SIMPLE bb_cat_business ALL NULL NULL NULL NULL 5697
1 SIMPLE bb_categories eq_ref PRIMARY PRIMARY 8 buxback_site.bb_cat_business.cat_id 1 Using where
Yani sonuç ilk sorgunun tamamlanması 40 saniye kadar sürebilir olmasıdır. Ben yine aynı ifadeyi arayın ben MYSQL gerçekleştirmek için beklediğiniz gibi, hızıdır. Milisaniye. Sonsuza kadar sürer sadece ilk arama var ...
Başka bir düşünce? Ben yardım için birini ödemek için mutlu olurdu.