mysql查询调优多语言表

时间:2016-09-16 07:55:08

标签: mysql

我有一个大表(多语言表),我需要优化我用于搜索的查询

表的结构是:

table products
    productID
    code
    price

table products_lang
    productID
    lang
    product_name
    sub_title
    status

现在这些表每个都有240,000条记录

当我想搜索product_name时,我使用以下查询

SELECT DISTINCT(p.productID)

FROM products as p

INNER JOIN products_lang as l ON
l.productID=p.productID
AND lang='en'                   

WHERE     
(l.productName LIKE '%keyword%') 

AND l.status =  '1' 

ORDER BY  p.price desc  
LIMIT 0,10  

从查询中我只得到与查询匹配的ID,然后我只查询products_lang以获取其他任何内容

问题是上面的查询需要2-3秒,这太多了

如果我直接搜索到products_lang

SELECT DISTINCT(l.productID)

FROM products_lang as l

WHERE 

l.lang='en'                 

AND (l.productName LIKE '%keyword%') 
AND l.status =  '1' 

LIMIT 0,10  

要快得多,但我没有ORDER BY p.price desc(因为我删除了JOIN)

任何人都可以帮助我更快地执行查询,或者将查询分成2个更小的​​查询时间以最小化查询时间

由于

2 个答案:

答案 0 :(得分:0)

在表products_lang的过滤行上添加适当的索引,并且(只是次要的)在某些过滤条件周围删除unuseful()

<div><iframe src="demo_iframe.htm" style="border:none" width="1050"
height="345" name="content"></iframe></div>

INDEX your_name  (status ,productName ,productID )

答案 1 :(得分:0)

尝试使用EXISTS而不是加入两个表

SELECT p.productID
FROM products as p
WHERE EXISTS (SELECT 1 FROM products_lang as l WHERE l.productID=p.productID AND 
                                                 lang='en' AND
                                                 l.status =  '1' AND 
                                                 l.productName LIKE '%keyword%')
ORDER BY  p.price desc  
LIMIT 0,10
相关问题