我正在尝试建立我的第一个查询的搜索页面查询,这非常快,结果在毫秒内加载
$ query是php变量,它是搜索文本
$sql="SELECT * FROM
tbl_product
WHERE
((tbl_product.pd_name LIKE '%$query%')
OR (tbl_product.pd_art LIKE '%$query%')
OR (tbl_product.pd_srkw LIKE '%$query%'))
AND pd_bestsell <> 1
ORDER BY RAND()";
但是,当我使用搜索建议表构建查询时,它的运行速度非常慢,并且需要2-4秒的加载时间。我们的服务器是非常强大的专用服务器,因此它不会成为服务器的问题。
sgtexts =保留建议文本
sgproduct =在建议表上保留产品ID
$sql="SELECT * FROM
tbl_product,tbl_suggetions
WHERE
((tbl_product.pd_name LIKE '%$query%')
OR (tbl_product.pd_art LIKE '%$query%')
OR (tbl_product.pd_srkw LIKE '%$query%')
OR (tbl_suggetions.sgtexts LIKE '%$query%'
AND tbl_product.pd_id=tbl_suggetions.sgproduct))
AND pd_bestsell <> 1
GROUP BY pd_id
ORDER BY RAND()";
谁能帮我优化第二次查询
您是否有任何理由要随机订购?删除它可以使其更快。
由于您将LIKE
运算符与一起使用%%
,因此将执行全表扫描,并且比使用LIKE
'example%'慢。
另外,在表上使用联接。试试这个
SELECT
*
FROM tbl_product tbl_product
JOIN tbl_suggetions tbl_suggetions ON tbl_suggetions.sgproduct=tbl_product.pd_id
WHERE
(
(tbl_product.pd_name LIKE '%$query%') OR
(tbl_product.pd_art LIKE '%$query%') OR
(tbl_product.pd_srkw LIKE '%$query%') OR
(tbl_suggetions.sgtexts LIKE '%$query%')
)
AND pd_bestsell <> 1
GROUP BY pd_id
ORDER BY RAND();
如果数据不需要随机排序,请删除 ORDER BY RAND()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句