看到这个2亿5千条数据的表,我的内心是拒绝的,各种条件筛选要取出相应的数据,被折磨了两天,现在记录下心路历程

先分享下mysql相关的知识点1 名词解释

主键(PRIMARY KEY): 唯一索引,不能重复

组合主键(UNIQUE): 组合索引,若干个字段组成一个主键2 SELECT必备 – EXPLAIN使用EXPLAIN来查看sql语句是否能命中索引,量大的表必须要命中索引才能执行,也还得看以下条件

(1) type

ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)(具体就不在这解释了)

(2) possible_keys

可能用到的索引,但不一定命中

(3) key

实际使用的key。想强制使用某个索引,可用FORCE INDEX。

(4) key_len

根据表定义计算而得的索引中使用的字节数,越短越好。

(5) rows

可能要读取的行数

(6) Extra (划重点)

Using Index: 表示使用索引,叫做覆盖索引,没有查询数据表,只查询了索引。如果同时出现Using Where代表可以用到索引,但是需要查询数据表。

Using where: 表示条件查询,不读取所有数据或者通过索引获取所需的数据。

Using filesort: 文件排序,无法利用索引的完成的排序操作

Using temporary: 需要使用临时表来存储结果集,常见于多表联合查询和排序如果出现Using filesort和Using temporary,尽量优化sql语句

开始操作这个2亿条数据的表1 命中联合主键

表中有若干个联合主键,就尽量往这些联合主键上靠了。EXPLAIN

SELECT *

FROM student

WHERE

class IN (1, 2, 3) AND

score > 90 AND

sex = 1

ORDER BY id DESC

LIMIT 0, 60idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEstudentrangeindex2, index3, index4, index5index244NULL642323Using index condition; Using filesort

可以命中联合主键索引,但rows特别多,执行非常慢,这个方案就pass了。2 命中联合主键进阶版

方案一中有些条件筛选命中联合主键速度还可以,但是加上ORDER BY time(time也是个索引)后就不行了。

主键id是时间加随机数,大体能满足排序,就改成了ORDER BY id,发现命中的索引还是联合主键。

对sql语句进行了如下修改:EXPLAIN

SELECT *

FROM student AS st1

LEFT JOIN student AS st2

ON st1.id = st2.id

WHERE

st1.class IN (1, 2, 3) AND

st1.score > 90 AND

st1.sex = 1

ORDER BY st1.id DESC

LIMIT 0, 60idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEst1rangeindex2, index3, index4, index5index244NULL642323Using where; Using index; Using filesort

1SIMPLEst2eq_refPRIMARYPRIMARY413800st.id1NULL

这样命中了联合主键和唯一主键,执行速度也很快,但是如果量比较大,改为st1.score > 60,就又不行了,第二个方案也pass。3 命中主键

方法总比困难多,最后只能往主键索引上靠了。先限定时间区间(可命中主键索引),能有效控制要筛选的数据量,再对时间区间内的数据筛选。EXPLAIN

SELECT *

FROM student

WHERE

(id LIKE '20180501%' OR id LIKE '20180502%' OR id LIKE '20180503%') AND

class IN (1, 2, 3) AND

score > 90 AND

sex = 1

ORDER BY id DESC

LIMIT 0, 60idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEstudentrangePRIMARY, index2, index3, index4, index5PRIMARY98NULL413800Using where

这样命中主键索引,Extra是Using where,执行速度也是相关快。某个条件筛选时Extra会有Using filesort,但执行速度挺快,就没管了。

总结

面对这样的mysql表只有命中主键索引啦。

mysql二亿大表_面对有2亿条数据的mysql表相关推荐

  1. 1亿条数据如何分表100张到Mysql数据库中(PHP)

    来源:http://www.jb51.net/article/70265.htm 这篇文章主要介绍了当数据量猛增的时候如何把一亿条数据分表100张到Mysql数据库中,需要的朋友可以参考下 下面通过创 ...

  2. php 分表 实战,PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP)

    <PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP)>要点: 本文介绍了PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP),希望对您有用.如果有疑问,可 ...

  3. mysql 5000万条数据库_1亿条数据如何分表100张到Mysql数据库中(PHP)

    下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码. 当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过 ...

  4. 教你急速快速批量插入1000万条数据到mysql数据库表面试题

    急速快速批量插入1000万条数据到mysql数据库表面试题 教你急速快速批量插入1000万条数据到mysql数据库表&面试题 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好 ...

  5. python操作数据表,循环造数100条数据

    python操作数据表,循环造数100条数据, 包括number,varchar. ```sql --先建个临时表 CREATE TABLE tempdata_aa( c1 VARCHAR2(30), ...

  6. mysql导入亿级数据_如何将上亿条大容量数据导入MYSQL

    我有一份数据量达到1,0015,0806条的csv文件,现在需要导入Mysql中. 在我电脑中安装的版本是MYSQL8.0.12,常见的管理工具有: 已知的有三种办法: 1.用图形管理工具Navica ...

  7. laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)

    接上期:<必看!PHP常见面试题--MySQL篇(一)> 11.MySQL的默认事务隔离级别是? 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到. 读提交(RC): ...

  8. mysql库垂按照模块_前任都能看懂的分库分表方案

    我们都知道,随着业务量的增长,数据量也会随之增加,这个时候就需要关注业务大表,因为大表会影响查询性能,DDL变更时间很长,影响业务的可用性,同时导致从库延迟很大,如果业务做了读写分离,导致用户重复操作 ...

  9. mysql 1000万数据读取_插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

最新文章

  1. BoneCP 学习笔记
  2. python字典嵌套列表怎么访问值的某个元素_通过键列表访问嵌套字典项?
  3. python log函数_Python log10() 函数
  4. 阿里P8架构师谈:Docker简介、组成架构、使用步骤、以及生态产品
  5. android音量键广播,音量控制键控制的音频流(setVolumeControlStream)描述
  6. 知方可补不足~sqlserver中使用sp_who查看sql的进程
  7. 【华为云技术分享】云图说|应用编排服务AOS,助力应用上云自动化
  8. Word2vec之CBOW模型和Skip-gram模型形象解释
  9. 计算月份天数包括闰年二月天数计算
  10. 基于python的酒店管理系统_基于Web酒店管理系统的设计与实现
  11. java--------------
  12. sails框架条件查询
  13. 风火编程--opencv使用记事
  14. SPSS数据统计分析前准备【002期】
  15. 感恩中国30年,速速来看甲骨文数据库云大会
  16. 市值从100亿缩水到3亿仅用三年,转型的趣店无“底“可抄?
  17. 数字图像处理期末大作业 完成总结
  18. 猿学~Google I/O 最全记录,看完我们睡不着了!
  19. PowerDesign 16.5.5.2 (4734) 汉化包
  20. Windows下一键交换Esc和caps和一键恢复的方法

热门文章

  1. 怎么搭建微信小程序的本地测试服务器
  2. Navicat 快捷键说明
  3. Java架构师-容器化(一):服务容器化技术-Docker、Cloud Foundry
  4. 如何在 Windows 上安装 ONLYOFFICE 文档 v7.2
  5. Linux云计算架构-使用LAMP搭建ecshop电商平台,并测试网站所能承受并发数
  6. 【线性代数】向量组及其线性组合
  7. 南京理工大学计算机学院张勇,南京理工大学教师信息
  8. 水滴pin安卓版apk_财务报销管理系统
  9. windos下 elasticksearch7.13安装踩坑记
  10. 微信PC端网站 微信扫码登陆