我几天前正在修改我的问题。重写了我的询问。
有人可以告诉我为什么在多个表上运行任何类型的查询需要这么长时间使用我将在下面发布的查询?
有没有人有时间帮我解决这个问题?我可以支付200.00美元,我认为这对两个小时的工作有好处。我会在这里发回答案,这样每个人都会受益。
查询基本上是这样的:
SELECT bb_business.business_name, bb_business.id AS bid FROM bb_business
LEFT JOIN bb_offers ON bb_business.id = bb_offers.store_id
LEFT JOIN bb_cat_business ON bb_business.id = bb_cat_business.store_id
LEFT JOIN bb_categories ON bb_categories.id = bb_cat_business.cat_id
WHERE bb_business.active = '1'
AND MATCH(bb_business.business_name) AGAINST ('zebra')
OR MATCH(bb_categories.category_name) AGAINST ('zebra')
OR MATCH (bb_business.city,bb_business.state,bb_business.zip) AGAINST ('zebra')
GROUP BY bb_business.business_name
ORDER BY bb_business.business_name DESC
LIMIT 1,10
该查询第一次执行需要50秒。第二次它的速度和预期一样快。
如果我将该查询更改为仅使用一个Match Against,则速度很快。只要我添加第二个MATCH或LIKE语句,它就会恢复到40-60个执行时间。
运行该确切查询的位置为:MySQL returned an empty result set (i.e. zero rows). (Query took 47.7614 sec)
解释返回:
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
当只使用一个匹配时,查询使用我在bb_business上的全文索引。当我有多个匹配时,它似乎不使用任何索引。
以下是bb_business上的索引:
PRIMARY PRIMARY 2877 id
store_id UNIQUE 2877 store_id
index_business_name INDEX 2877 business_name
business_name FULLTEXT 1 business_name
city FULLTEXT 1 city
state
zip
以下是bb_categories的索引:
PRIMARY PRIMARY 15 id
category_name UNIQUE None category_name
category_name_2 FULLTEXT None category_name
我很绝望!
感谢!
答案 0 :(得分:1)
问题是你强迫MySQL创建临时表来解析查询。只要你做多场比赛,这几乎就是一个问题。
如果您的用例确实需要您这样做,那么您有两个主要选项(我可以看到)。