【发布时间】:2016-09-14 12:55:19
【问题描述】:
使用此查询来获取包含满足所有三个必需单词术语(联想、笔记本电脑、计算机)的单词的产品:
SELECT t1.id, t1.name, t1.price FROM
(SELECT p.id AS productid, name, price
FROM products p JOIN productwords pw ON p.id = pw.productid
JOIN words w ON pw.wordid = w.id WHERE word.term = 'lenovo') t1
INNER JOIN
(SELECT p.id AS productid, name, price
FROM products p JOIN productwords pw ON p.id = pw.productid
JOIN words w ON pw.wordid = w.id WHERE word.term = 'laptop') t2
INNER JOIN
(SELECT p.id AS productid, name, price
FROM products p JOIN productwords pw ON p.id = pw.productid
JOIN words w ON pw.wordid = w.id WHERE word.term = 'computer') t3
ON
t1.productid = t2.productid
AND
t1.productid = t3.productid
ORDER BY t1.name
据我所知,查询考虑了每个词的整个词表(表有索引。数据库是 MySql)。
查询能否以更好的方式重写,从而变得更快? (表格包含数百万行)
例如对于子集,“laptop”搜索只考虑匹配“lenovo”的行 - 而“computer”搜索只考虑首先匹配“lenovo”然后是“laptop”的行。
谢谢!
【问题讨论】:
标签: mysql select inner-join