MySQL索引篇之千万级数据实战测试


Posted in MySQL onApril 05, 2021
  1. MySQL索引创建

先说明一个问题啊,如果你创建数据表时创建了主键,此时主键列会自动创建索引

-- 创建索引的语法格式
-- alter table 表名 add index 索引名[可选](列名, ..)
-- 给name字段添加索引
alter table classes add index my_name (name);
  1. 索引删除
-- 删除索引的语法格式
-- alter table 表名 drop index 索引名
alter table classes drop index my_name;

-- 备注:如果不知道索引名,可以查看创表sql语句
show create table classes;
  1. 特殊索引–联合索引说明:

3.1. 联合索引又叫复合索引,即一个索引覆盖表中两个或者多个字段,一般用在多个字段一起查询的时候
3.2 减少磁盘空间开销,因为每创建一个索引,其实就是创建了一个索引文件,那么会增加磁盘空间的开销。
3.3 联合索引的最左原则:在使用联合索引的时候,我们要遵守一个最左原则,即index(name,age)支持 name 、name 和 age 组合查询,而不支持单独 age 查询,因为没有用到创建的联合索引。

  • 联合索引的创建
-- 创建联合索引
alter table teacher add index (name,age);
  • 假设我们已经创建了(name, age)的联合索引,看下面:
-- 下面的查询使用到了联合索引
select * from stu where name='张三' -- 这里使用了联合索引的name部分
select * from stu where name='李四' and age=10 -- 这里完整的使用联合索引,包括 name 和 age 部分 
-- 下面的查询没有使用到联合索引
select * from stu where age=10 -- 因为联合索引里面没有这个组合,只有 name | name age 这两种组合
  1. 接下来,我们展示一个索引实战案例 – 对比查询效率提升:
# 1. 创建测试表testindex:
create table test_index(title varchar(10));
# 2.  向数据表中写入数据
from pymysql import connect

def main():
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,database='python',user='root',password='mysql',charset='utf8')
    # 获得Cursor对象
    cursor = conn.cursor()
    # 插入10万次数据
    for i in range(10000000):
        cursor.execute("insert into test_index values('ha-%d')" % i)
    # 提交数据
    conn.commit()

if __name__ == "__main__":
    main()

# 3. 开启运行时间监测:
set profiling=1;
# 4. 查找第1000万条数据ha-99999999  (没有索引的情况)
select * from test_index where title='ha-99999999';
# 5. 查看执行的时间:
show profiles;
# 6. 给title字段创建索引:
alter table test_index add index (title);
# 7. 再次执行查询语句           (索引已经创建的情况)
select * from test_index where title='ha-99999999';
# 8. 再次查看执行的时间
show profiles;
  • 未建立索引的情况下查询时间:
    MySQL索引篇之千万级数据实战测试
  • 建立索引之后的数据查询时间:
    MySQL索引篇之千万级数据实战测试
    对比计算:
    MySQL索引篇之千万级数据实战测试

总结:本次测试结果,创建索引查询与无索引查询对比之下效率提升105倍。

MySQL 相关文章推荐
MySQL 分组查询的优化方法
May 12 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
Nov 27 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
MySQL分区以及建索引的方法总结
Apr 13 MySQL
MySQL表的增删改查(基础)
Apr 05 #MySQL
MySQL入门命令之函数-单行函数-流程控制函数
Apr 05 #MySQL
浅析InnoDB索引结构
Apr 05 #MySQL
mysql知识点整理
Apr 05 #MySQL
MySQL令人咋舌的隐式转换
Apr 05 #MySQL
MySQL锁机制
MySQL学习总结-基础架构概述
You might like
php中inlcude()性能对比详解
2012/09/16 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js生成随机数方法和实例
2017/01/17 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python Pandas 箱线图的实现
2019/07/23 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
联强国际笔试题面试题
2013/07/10 面试题
信访工作者先进事迹
2014/01/17 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL