【发布时间】:2014-12-08 19:52:18
【问题描述】:
我有一个大约 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 秒。
你能帮帮我吗?
【问题讨论】:
-
可以改一下表的结构吗?
-
我不明白为什么人们选择关键字来命名表格的列
-
stackoverflow.com/questions/84346/…writtenfrom 上的索引是无用的,除非它是基于长度的索引。
-
那么只添加一个具有书面形式长度的新列就足够了吗?那么我应该简单地索引这个新列还是有更多的东西?
-
MySQL 不支持基于长度的索引,所以创建一个触发器和另一个属性作为索引就可以了。
标签: mysql sql query-optimization database-performance