... çok uzun çalıştırmak için 30 saniye alarak mysql sorgu

0 Cevap php

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.

0 Cevap