mysql - 限制mysql关系表

标签 mysql

我有以下表格:

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/

相关文章:

MySQL POLYGON 查询无结果

php - 如何只插入相同日期的条目不超过4条?

php - 在同一 Controller 中的几个方法中重用 mysql 查询代码 - Laravel 5.4

MYSQL:第一个表条目包含第二个表中的匹配条目。任何疑问想法

mysql: ORDER BY mysql表某列某元素出现次数

mysql - 无法在 OS X 10.9 上启动 MySQL

c# - 如何在C#中编写sql语句来连接数据

php - 如何使用 MacPorts 添加对 PHP 的 MySQL 支持?

php - 在 PHP 中向 MySQL 插入多行(单个查询): Prepare-Execute vs. 准备-绑定(bind)-执行

php - 使用 PHP 从文本文件将某些行和字符发送到 MySql