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部分操作
Apr 05 MySQL
Mysql Show Profile
Apr 05 MySQL
MySQL主从复制断开的常用修复方法
Apr 07 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
mysql数据库入门第一步之创建表
May 14 MySQL
mysql升级到5.7时,wordpress导数据报错1067的问题
May 27 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
MySQL连接控制插件介绍
Sep 25 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
php实现简单文件下载的方法
2015/01/30 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
python开发之函数定义实例分析
2015/11/12 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
python机器学习库常用汇总
2017/11/15 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
粗加工管理制度
2014/02/04 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
民事授权委托书范文
2014/08/02 职场文书
年终晚会活动方案
2014/08/21 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
技术负责人岗位职责
2015/02/10 职场文书
开学典礼观后感
2015/06/15 职场文书
爱国主义主题班会
2015/08/14 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python