mysql 作为一款非常优秀的免费数据库被广泛的使用,平时我们开发的项目数据过百万的时候不多。最近花了大量的时间来深入的研究mysql百万级数据情况下的优化。 遇到了很多问题并解决了他们,特此分享给大家。欢迎提出您的宝贵意见!

相关推荐:《MySQL教程》

测试环境

数据总数 300万条 占用磁盘空间 1G 左右

数据结构表1 news [ 文章表 引擎 myisam 字符集 utf-8 ]

-----------------------------------------------------

idint11主键自动增加

cateint11索引

titlevarchar200标题(便于基础搜索做了索引)

contenttext文章正文

dateint11文章发布时间(时间戳形式)表2 cate [ 文章分类表 引擎 myisam 字符集 utf-8 ]

-----------------------------------------------------

cate_idint11主键自动增加

cate_namevarchar200文章标题

查询总数myIsam 引擎下

select count(*) as total from news

//耗时 0.001秒 极快

//带上条件

select count(*) as total from news where cate = 1

耗时 0.046秒 可以接受的速度

innodb 引擎下

select count(*) as total from news

//耗时 0.7秒 很慢

select count(*) as total from news where cate = 1

耗时 0.7秒 很慢

为什么2种引擎查询速度相差这么大?

InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。

MyISAM只要简单的读出保存好的行数即可。

注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上where col 条件。其中col列是表的主键之外的其他具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。

总结

mysql 在300万条数据(myisam引擎)情况下使用 count(*) 进行数据总数查询包含条件(正确设置索引)运行时间正常。对于经常进行读取的数据我们建议使用myIsam引擎。

mysql百万级数据测试_百万级数据mysql测试环境介绍相关推荐

  1. easyexcel导出百万级数据_百万级数据下的mysql深度解析

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn mysql 作为一款非常优秀的免费数据库被广泛的使用,平时我们开发的项目数据过百万的时候不多 ...

  2. mysql 条件查询分页_百万数据下mysql条件查询及分页查询的注意事项

    接上一节<百万数据mysql分页问题>,我们加上查询条件:select id from news where cate = 1 order by id desc limit 500000 ...

  3. easyexcel导出百万级数据_百万级别数据Excel导出优化

    这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现了服务 ...

  4. mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁

    在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...

  5. mysql慢查询 表级锁_三分钟了解Mysql的表级锁——《深究Mysql锁》

    延伸阅读: 五分钟了解Mysql的行级锁 一分钟深入Mysql的意向锁 mysql锁相关讲解及其应用--<深究mysql锁>了解锁前,一定要先看这篇,了解什么是MVCC,如果我们学习锁,没 ...

  6. SELECT ... FOR UPDATE_手动加行级排他锁_行级写锁_行级独占锁

    文章目录 介绍 加锁情况分析 明确指定主键,并且数据真实存在,锁定行 明确指定主键,但数据不存在,不加锁 主键不明确,锁定整个表 无主键,锁定整个表 应用场景 介绍 1.FOR UPDATE 加的锁是 ...

  7. mysql修改工资字段_基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎)...

    基于Linux的MySQL操作实例(修改表结构,MySQL索引,MySQL数据引擎) 前言 本篇是基于Linux下针对MySQL表结构的修改,MySQL索引的操作以及MySQL数据引擎的配置和说明. ...

  8. mysql循环更新数据_大批量更新数据mysql批量更新的四种方法

    mysql 批量更新如果一条条去更新效率是相当的慢, 循环一条一条的更新记录,一条记录update一次,这样性能很差,也很容易造成阻塞. mysql 批量更新共有以下四种办法 1..replace i ...

  9. mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

    转载自公众号:玩转MySQL,作者:洪斌 一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标 ...

最新文章

  1. Nat. Commun.|概率蛋白质序列模型的生成能力
  2. 【datawhale 】打卡 task 01--深度学习
  3. Linux下oracle数据库spfile参数配置文件丢失问题解决,“ORA-32001: write to SPFILE requested but no SPFILE is in use“问题处理
  4. 页面提交插入到数据库 1.jsp
  5. testng的报告自定义笔记
  6. [转]HTTP协议及其请求头分析
  7. 画胖小人和瘦小人,建造者模式版本
  8. 重启IIS和SqlServer的命令行
  9. Linux负载均衡软件LVS之一(概念篇)
  10. Excel 数据导入到Access数据库,报错“找不到可安装的ISAM”的解决办法
  11. mysql convert报错_部署mysql版本项目问题记录
  12. Java Map遍历方式的选择
  13. vue: 组件中 template 定义
  14. VC2010 运行时闪退
  15. 《高效能人士的七个习惯》读后感
  16. 一个简易邮件群发软件设计与实现
  17. 面向不平衡数据的电子病历自动分类研究
  18. 【Flutter 问题系列第 71 篇】Flutter 中 Uint8List 和 Image 之间的相互转换
  19. 骨传导耳机会伤害耳朵吗?骨传导耳机优点是什么
  20. Linux学习笔记Day01-01在虚拟机中下载Linux系统(centos)详细步骤,vmtools安装

热门文章

  1. UVA10125 POJ2549 Sumsets【暴力+二分】
  2. Bailian2746 约瑟夫问题【 约瑟夫问题】
  3. NUC1177 排序【排序】
  4. mxnet(gluon)—— 模型、数据集、损失函数、优化子等类、接口大全
  5. Java IO(输入输出)
  6. word 软换行与硬换行
  7. vs 2013 常用快捷键及常见问题的解决
  8. js原型和原型链_初识JS原型/原型链/原型继承
  9. python骗局-老码农冒死揭开真相:quot;别吹了,Python无用!”
  10. python怎么下载教程-Python爬虫文件下载图文教程