一个表,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;

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

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

  1. mysql char(36)_MySQL中char(36)被认为是GUID导致的BUG及解决方案

    有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-x ...

  2. mysql 快速初始化_MySQL中的批量初始化数据的对比测试(r12笔记第71天)

    一直以来对于MySQL的存储过程性能还是颇有微词的,说实话够慢的.有时候想做一些对比测试,存储过程初始化几万条数据都得好一会儿,这功夫Oracle类似的测试早都做完了,今天就赶个晚班车,把这个没做完的 ...

  3. mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询

    [多选题]人类行为遗传学工作者倾向于把人的行为遗传分为哪几类 [填空题]MySQL的连接操作包括内连接.( )和交叉连接. [判断题]社会生活类尤其是人文风光类纪录片的解说则多用文学. 散文手法, 既 ...

  4. mysql range用法_MySQL中Explain的用法总结(详细)

    本篇文章给大家带来的内容是关于MySQL中Explain的用法总结(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 执行计划(query Execution plan) 语法e ...

  5. mysql 全文索引 权重_MySQL中的全文索引

    之前曾经发表了一篇关于SQL Server全文索引的文章.现在将MySQL全文索引的配置过程记录一下. Step1:创建Student表 CREATE TABLE `student` ( `id` I ...

  6. mysql regexp 特殊字符_MySQL中REGEXP正则表达式使用大全

    REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. ...

  7. mysql启动触发器_MYSQL中禁用/启动触发器

    在使用MYSQL过程中,经常会使用到触发器,但是有时使用不当会造成一些麻烦.有没有一种办法可以控制触发器的调用呢? 触发器顾名思义就是数据库在一定的调条件自动调用的SQL语句,触发器拒绝了人工调用的过 ...

  8. 数据库数据变大会导致查询慢_是什么导致数据库变慢?

    数据库数据变大会导致查询慢 Why is my database so slow? This query used to be so much faster. Why does it take so ...

  9. php mysql 时间戳查询_mysql中时间查询函数(包括时间戳)

    mysql中时间查询函数(包括时间戳) 这些函数都是MySQL自带的,可以直接使用在PHP写的MySQL查询语句中哦 1-CURDATE()或CURRENT_DATE()和CURTIME()或CURR ...

最新文章

  1. R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)
  2. python使用字典格式化字符串-4.2.3Python下字典的格式化字符串
  3. Interview:算法岗位面试—10.23下午—上海某科技公司算法岗位(偏机器学习算法,上市)技术面试之比赛积累、项目经验、个人未来发展
  4. SAP CRM产品主数据明细页面无法打开的调试步骤
  5. 如何 方法内指令重排 进制_谈谈指令重排
  6. msyql 1062
  7. Monte Carlo Rendering De-noising
  8. ie升级后必须重启计算机吗,微软迟到的补丁:升级到IE9将无需重启计算机
  9. 【手游逆向】初探Unity3d+il2cpp.so网游修改新手教程篇[内附所有相关工具下载地址和说明介绍】
  10. AI开发者大会:2020年7月3日和7月4日CSDN重磅举办《百万人学AI》大会议程及其对应视频回放链接
  11. 计算机老师感言,信息技术教师感言
  12. 一、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
  13. 个人怎么开发APP?APP开发全流程解析!
  14. 【傲腾观察室】英特尔® 傲腾™技术,助力金融行业数据库价值迸发!
  15. 星星之火-31:WCDMA码分多址复用与解复用的数学计算案例
  16. typora + smss / github / 又拍云 / 七牛云 图床
  17. 如何彻底删除ELTIMA的vspd(虚拟串口)
  18. “Git 是我用过最笨重的软件”!喷完 C++ 喷 Git,这位 Azure CTO 到底何许人也?...
  19. centos7 搭建ngnix+vsftp服务器
  20. AVAudioRecorder 录音

热门文章

  1. Fastadmin 海外服务器离线安装插件失败解决方案
  2. apiDoc生成接口文档,不费吹灰之力
  3. EV3中的API(C4EV3上测试)
  4. 【网络小知识】之TCP IP 五元组(five-tuple/5-tuple)
  5. 国内高校计算机系排名
  6. crontab执行任务时命令无法查到到命令
  7. 明日之后android和ios,明日之后安卓和ios可以联机吗 两个互通吗
  8. DappNode Host:打破普通人接触PHA的壁垒
  9. 数据解读2019春节档哪部电影最值得看?
  10. 西安python培训机构贴吧