mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?

mysql longtext 查询_mysql中longtext存在大量数据时,会导致查询很慢?一个表,1.5w条数据,字段:id,name,content,last_update_timeid,自定义主键name,varchar类型content是longtext类型,last_update_time为datetime类型,不为空content当中是文本和代码等,平均长度在20k+。case1:selectid,namefromtorderbylast_update_tim…

大家好,又见面了,我是你们的朋友全栈君。

一个表,1.5w条数据,字段: id,name,content,last_update_time

id,自定义主键

name,varchar类型

content是longtext类型,

last_update_time为datetime类型,不为空

content当中是文本和代码等,平均长度在20k+。

case1:

select id, name from t order by last_update_time limit 10000, 10

当content当中有大量的文本时,case1的效率极慢。

及时给 last_update_time 加上btree索引, 效率有提升,但是依然慢

把content一列删掉,效率很高。毫秒级别。

使用explain:

有content时结果:

mysql> explain select id, name, last_update_time from t order by last_update_time desc limit 11120, 11;

+—-+————-+———–+——-+—————+———————-+———+——+——-+——-+

| id | select_type | table     | type  | possible_keys | key                  | key_len | ref  | rows  | Extra |

+—-+————-+———–+——-+—————+———————-+———+——+——-+——-+

|  1 | SIMPLE      | t | index | NULL          | idx_last_update_time | 8       | NULL | 11131 | NULL  |

+—-+————-+———–+——-+—————+———————-+———+——+——-+——-+

无content列的结果:

+—-+————-+—————-+——+—————+——+———+——+——-+—————-+

| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows  | Extra          |

+—-+————-+—————-+——+—————+——+———+——+——-+—————-+

|  1 | SIMPLE      | t2 | ALL  | NULL          | NULL | NULL    | NULL | 15544 | Using filesort |

+—-+————-+—————-+——+—————+——+———+——+——-+—————-+

1 row in set (0.00 sec)

请大神请教,是什么问题?该怎么优化?

无content的时候,查询走的是idx_last_update_time,我猜测这个索引中包含了id,name字段,因此仅通过索引就可以获取到所需的数据,因此速度很快。

有content的时候,因为有limit 10000的语句,且无法从索引中获取content字段的内容,因此采用的全表扫描的方法。

建议改写sql语句,让数据库的执行计划更充分使用索引,假设id是主键:

select id, name, content

from t

where id in (

select id

from t

order by last_update_time limit 10000, 10

)

content当中是文本和代码等,平均长度在20k+。

这种应该建立全文索引(FUNLLTEXT INDEX)吧。简单的索引不适合这种超长文本的字段。

我觉得,主要跟你的分页查询的方式有关,limit 10000,10 这个意思是扫描满足条件的10010条数据,扔掉前面的10000行,返回最后的10行,在加上你的表中有个,非常大的字段,这样必然增加数据库查询的i/o时间,

查询优化你可以参照 @邢爱明 的

SELECT id,title,content FROM items WHERE id IN (SELECT id FROM items ORDER BY last_update_time limit 10000, 10);

还有一种优化方式:你可以记录最后的last_update_time 每次最后的值。然后查询可以这样写:

SELECT * FROM items WHERE last_update_time > “最后记录的值” order by last_update_time limit 0,10;

这两种方式你可以执行看看那个效率高,希望对你有帮助。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146534.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月14日 下午11:40
下一篇 2022年5月14日 下午11:40


相关推荐

  • JAVA转义字符详解

    JAVA转义字符详解一 JAVA 中反斜杠 的作用在不同的系统中 路径的分隔符不同 故需要做出判断 并切换分隔符 VBS 代码中确实不用转义 但是在 JAVA 或 JS 中 它采用的是 C 语言的语法 所以要转义 引号内要双写 表示一个反 java 把字符串中的反斜杠 替换成 replaceAll 里面用的是正则表达式 所以字符串转义一次 正则转义一次 所以一个斜扛要写 4 个 用 replaceAll

    2026年3月17日
    2
  • Oracle查询、创建、删除DBLink

    Oracle查询、创建、删除DBLink查询 DBLINK 信息 select fromdba db links selectowner object namefromdba objectswhere type DATABASELINK select fromALL DB LINKS Oracle 创建 dblink 报错 ORA 01017 ORA 02063 解决 根据 ORA 01017 的提示是连接到另一方

    2026年3月17日
    2
  • 命令提示符cmd以管理员身份运行的快捷键

    命令提示符cmd以管理员身份运行的快捷键1 win r 打开运行 2 输入 cmd3 同时按下 ctrl shift enter 回车即可快速打开

    2026年3月26日
    2
  • 简单介绍T检验和卡方检验「建议收藏」

    简单介绍T检验和卡方检验「建议收藏」最近在看统计学方面的知识,正好有个学妹问我一些检验方面的东西,以前读书那会的统计学知识早已忘记,经过半天的努力,又把知识给拾起来了,下面简单介绍下T检验和卡方检验。1. T检验适用范围:主要用于样本含量较小(例如n总体标准差σ未知的正态分布。其中最常用的是单总体t检验,单总体t检验是检验一个样本平均数与一个已知的总体平均数的差异是否显著。当总体分布是正态分布,如总体标准差未知

    2022年6月19日
    52
  • 软件中的版权声明

    软件中的版权声明参考 1 关于网站版权声明 Copyright 的格式和写法 2 软件 Copyright 中年份有什么意义 格式 Copyright dates by author owner 典型说明如下 Copyright 2004AdobeSys Allrightsres 1995 2004Macromed Inc All

    2026年3月18日
    2
  • 2020年最佳恶意软件删除工具Top 10「建议收藏」

    2020年最佳恶意软件删除工具Top 10「建议收藏」恶意软件删除工具可以帮助你从个人计算机中删除危险的恶意软件,从而避免受到黑客的攻击并防止以后的攻击隐患。保障你的电脑或笔记本电脑的安全性是非常重要的,因为你永远不知道攻击者何时会对你的设备发起攻击。所以,这意味着你不仅需要杀毒软件,还需要一个恶意软件删除工具。比如,广告软件和间谍软件有很大的不同之处,它们不是病毒。因此,仅查出设备是否已受到恶意软件的影响是远远不够的,而且采用手动删除的方法也是非常不切实际的。故此,恶意软件清除已成为一个普遍的问题。如今,恶意软件感染越来越普遍化,即便你自认为..

    2022年6月24日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号