我正在尝试构建一个搜索页面的查询--这是我的第一个查询,这非常快--在Milli秒内加载结果
$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秒。我们的服务器是非常强大的专用服务器,所以它不会成为服务器的问题。
sgtext=保留建议文本
sgproduct =将产品ids保留在建议表中
$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()";有人能帮我优化第二个查询吗?
发布于 2016-08-30 08:40:55
你有什么理由随机订购吗?移除这个会让它更快。
由于您将LIKE运算符与%%结合使用,这将执行全表扫描,并且与使用LIKE‘示例%’相比,其速度自然要慢。
另外,在你的桌子上使用一个连接。尝尝这个
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()
https://stackoverflow.com/questions/39222565
复制相似问题