-1

例如我有表和值:

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 列添加索引,这个查询会更快吗?
什么类型的指数是好的?

4

1 回答 1

0
SELECT  st_id
FROM    words
WHERE   wd_ID IN (2, 5)
GROUP   BY st_id
HAVING  COUNT(DISTINCT wd_ID) = 2

如果wd_ID对于 each 是唯一的st_id,则不需要DISTINCT在 having 子句中具有,

HAVING  COUNT(*) = 2

您可以在此链接上阅读更多信息,

于 2013-09-25T14:06:22.067 回答