php - MySQL 选择查询需要一些优化

标签 php mysql join query-optimization

我正在尝试为搜索页面构建一个查询,这是我的第一个查询,结果加载速度非常快

$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/

相关文章:

php - Prestashop 数据库异常

javascript - ajax 从成功的 View 中删除 div

php - 如何从表中获取不同的数据,然后连接其他表并求两列的总和

如果连接表中没有记录,mysql 结果

javascript - 更新记录而不刷新

php - 如何在 php 中实现组合

mysql - SQL 子查询和 ORDER BY

java - 如何使用 JDBC getGenerateKeys 获取生成的 UUID 类型?

r - 如何加入位置数据(纬度,经度)

mysql - Laravel,使用 JOIN 加载关系