简体   繁体   中英

MySQL select query need some optimization

I'm trying to build a query for search page this my first query, and this is very fast the results load within Milli seconds

$query is php variable which is search text

$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()";

But when i build a query with search suggestions table it's very slow and take 2-4 seconds for load. our server is very powerful dedicated one so it cannot be a issue with server.

sgtexts = keep suggestion texts

sgproduct =keep products ids on suggestion table

$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()";

can anyone help me for optimize second query please

Is there any reason why you order by random? Removing this will make it faster.

Since you are using LIKE operator with %% , this will perform a full table scan and is by nature slower than using LIKE 'example%'.

Also, use a join on your table. Try this

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();

If the data doesnt need to be randomly ordered, remove the ORDER BY RAND()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM