我有一个包含大约 100 万行的 MySQL 表。表名是 dedict
当我运行一个简单的查询时:
select writtenform from dedict where length(writtenform)>5
and partofspeech <> 'abbreviation' order by id asc limit 50,1
查询大约需要 1 秒。
我将 id
列(自动增量)和 writtenForm
上的索引作为主键。
下面是explain dedict
的结果:
Field Type Null Key Default Extra
senseid varchar(255) NO NULL
writtenForm varchar(255) YES MUL NULL
languageIdentifier varchar(255) YES NULL
partOfSpeech varchar(255) YES NULL
_index int(11) YES NULL
writtenText longtext YES NULL
lexiconid varchar(255) YES NULL
id int(11) NO PRI NULL auto_increment
一定是哪里出了问题。我必须运行此查询 5 次才能显示网页,因此加载时间超过 5 秒。
你能帮帮我吗?
最佳答案
也许您可以优化属性长度。有 5 个类型为 varchar(255) 的属性。
在任何情况下,为了更快地获得一些东西,您可以在插入/更新语句上创建触发器以将内容长度存储在另一个属性中。 因此,每次插入或更新一行时,触发器都会将长度存储在另一列整数类型中。
此外,你真的需要一次查询所有表吗?
关于mysql - 中等 MySQL 表(100 万行)的慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27365743/