我有一个大表(多语言表),我需要优化我用于搜索的查询
表的结构是:
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个更小的查询时间以最小化查询时间
由于
答案 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