我正在尝试为搜索页面构建一个查询,这是我的第一个查询,结果加载速度非常快
$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()
关于php - MySQL 选择查询需要一些优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39222565/