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 Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 MySQL
MySQL添加索引特点及优化问题
Jul 23 MySQL
Mysql如何查看是否使用到索引
Dec 24 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
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python脚本实现虾米网签到功能
2016/04/12 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
python实现求最长回文子串长度
2018/01/22 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
python求解汉诺塔游戏
2020/07/09 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
高职教师岗位职责
2013/12/24 职场文书
年会搞笑主持词
2014/03/27 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
Python类方法总结讲解
2021/07/26 Python