如何使用Join在MySql中应用索引
我对索引不是很熟悉。我在记录上应用索引,因为在表上查找结果要花很多时间。查询工作正常如何使用Join在MySql中应用索引,mysql,indexing,Mysql,Indexing,我对索引不是很熟悉。我在记录上应用索引,因为在表上查找结果要花很多时间。查询工作正常 SELECT words.wordid, synsets.synsetid, pos, definition FROM words, senses, synsets WHERE words.wordid = senses.wordid AND senses.synsetid = synsets.synsetid AND lemma='apple' | wordid | lemma
SELECT words.wordid, synsets.synsetid, pos, definition
FROM words, senses, synsets
WHERE words.wordid = senses.wordid
AND senses.synsetid = synsets.synsetid
AND lemma='apple'
| wordid | lemma |
+--------+--------------------+-
| 1 | Apply |
| 2 | PRIMARY |
| 3 | DEPENDENT |
+----+--------------------+-----
其他表格
语法集第三表 感官表
sql查询工作正常,但现在我必须应用索引来获得比简单查询快得多的结果
如果您只运行这样的SELECT,我如何在这三个表上应用索引
SELECT words.wordid, synsets.synsetid, pos, definition
FROM words, senses, synsets
WHERE words.wordid = senses.wordid
AND senses.synsetid = synsets.synsetid
AND lemma='apple'
您需要这些索引(请参阅手册中的更多内容:):
如果要运行另一个select查询,则应添加更多索引以提高select性能:)首先,让我们使用
JOIN..ON
语法:
SELECT words.wordid, synsets.synsetid, pos, definition
FROM words
JOIN senses ON words.wordid = senses.wordid
JOIN synsets ON senses.synsetid = synsets.synsetid
WHERE words.lemma='apple'
现在,我们可以看到,WHERE
子句中唯一有用的东西是words.lemma
。那么,让我们为单词:
INDEX(lemma)
一旦找到了苹果的单词
,下一个表格就是感官
。现在,该表需要:
INDEX(wordid)
最后,为了有效地进入synset
,请
INDEX(synsetid)
根据列名,我猜synsetid
已经是主键了。请记住,主键
是一个唯一的
键,它是一个索引
。因此,如果是PK,请不要添加我建议的索引
INDEX(lemma)
INDEX(wordid)
INDEX(synsetid)