mysql - 中等 MySQL 表(100 万行)的慢查询

标签 mysql sql query-optimization database-performance

我有一个包含大约 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/

相关文章:

php - SQL查询以选择一个月的两天之间

sql - 插入时出现 TSQL 错误 "String or binary data would be truncated"

mysql - 如何通过一个查询在同一个表中插入多行?

mysql - 如何仅在MySQL中获取下一行值

apache-spark - Apache Spark 统计数据集合..

mysql - Wordpress Mysql 如果标题包含则删除帖子

mysql - 使用 apache-nifi 从流文件内容查询数据库记录以检索数据

mysql错误1360,无法删除触发器。这是一个错误吗?

sql - 删除一个表中所有未被另一个表引用的记录

mysql - 从上个月的价格变化表中获取最后 2 条更新的unit_price