我有以下表格:
Table: words - 超过 200, 000 行
id word
1 a
2 b
3 c
4 d
and so on.
表:pos
id part
1 noun
2 verb
3 adjective
4 adverb
and so on.
定义 - 超过 500,000 行
id wordid posid definition
1 1 1 The first letter of the Roman alphabet.
2 1 1 Blood group 'A'.
3 1 1 The abbreviation of Ace.
4 2 1 The second letter of the Roman alphabet.
5 2 1 The definitions of B go on.
我想要最快的查询来限制单词而不是定义。您的帮助将不胜感激。
我试过:
SELECT word, part, definition
FROM words, pos, definitions
WHERE words.id = wordid
AND pos.id = posid
ORDER BY word
LIMIT 2
最佳答案
您需要使用此查询来更快地检索数据:
SELECT w.word,p.part,d.definition
from definitions d
inner join pos p
on d.posid=p.id
inner join words w
on w.id=d.wordid
order by word
我的代码和你的代码的区别:
一个区别是第一个选项通过在 where 子句中表达连接条件来隐藏意图。
第二个选项,写出连接条件的地方对于阅读查询的用户来说更清楚。它显示了查询的确切意图。
inner join 语法更可取,因为它对读者来说更容易,正如其他人已经评论过的,有时速度更快,就像在您的数据中一样
就性能或任何其他差异而言,应该没有任何差异。在大多数 RDBMS 下,这两个查询应该返回完全相同的结果并执行相同的操作。
编辑:
最终代码是:
SELECT w.word,p.part,d.definition
from definitions d
inner join pos p
on d.posid=p.id
inner join words w
on w.id=d.wordid
order by word
WHERE
(SELECT COUNT(*)
FROM words w
WHERE w.id = d.wordid ) <=2
希望这段代码对您有所帮助。
关于mysql - 限制mysql关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828411/