例如,我有表格和值:
CREATE TABLE IF NOT EXISTS `words` (
`wd_id` int(11) NOT NULL,
`st_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
----------------------------
| wd_id | st_id |
----------------------------
| 2 | 4 |
----------------------------
| 5 | 4 |
----------------------------
| 7 | 8 |
----------------------------
| 2 | 8 |
----------------------------
| 7 | 9 |
----------------------------
| 2 | 10 |
----------------------------
| 5 | 10 |
----------------------------
wd_id是单词的id st_id是句子的id
如果我知道两个单词的id。我想得到有这个词的句子列表。 例如,这个ID是2和5,那么ANSWER将是4和10。
在这张表中会有数百万行。所以我需要仔细查询!!!
这是我写的查询:
SELECT st_id
FROM words
WHERE wd_id = 5 AND st_id IN (
SELECT st_id
FROM words
WHERE wd_id = 2
)
有人能写得更好吗?或者对于N个字有效吗?
如果我为wd_id和st_id COLUMNS添加了索引,这个查询会更快吗?
什么类型的指数会好?
答案 0 :(得分:0)
SELECT st_id
FROM words
WHERE wd_ID IN (2, 5)
GROUP BY st_id
HAVING COUNT(DISTINCT wd_ID) = 2
如果wd_ID
对于每个st_id
都是唯一的,则您不需要在having子句中包含DISTINCT
,
HAVING COUNT(*) = 2
您可以在此链接上阅读更多内容,