大家好,我是anyux。本文介绍MySQL数据库的索引创建与删除。

BTree树的索引分类

聚集索引,聚集索引一般是主键列辅助索引,辅助索引辅助聚集索引

聚集索引生成过程

MySQL会自动选择主键作为聚集索引列,没有主键列会选择唯一键,如果都没有会生成隐藏的主键列

MySQL进行存储时,会按照聚集索引列值的顺序,有序存储数据行聚集索引直接将原表数据页,作为叶子结点,然后提取聚集索引列向上生成枝和根

辅助索引生成过程

管理员选择一个列创建辅助索引

MySQL会自动将此列的值取出来将此列的值自动排序将排好序的数据,均匀的存储到索引的叶子节点生成枝节点和根节点

辅助索引的使用过程

先遍历辅助索引,找到对应的索引键值所对应的id值或者是主键值,进而使用主键值回到聚集索引,再进行遍历查询找到指行数据

聚集索引和辅助索引的区别

表中的任何一个列都可以创建辅助索引,在你有需要的时候,只要名字不同即可在一张表中,聚集索引只能有一个,一般是主键辅助索引,叶子结点只存储索引列的有序值聚集索引,叶子结点存储的是有序的整行数据MySQL的表数据存储是聚集索引组织表

辅助索引细分

单列辅助索引

联合索引(覆盖索引)[重要]

唯一索引

索引树高度通常情况下,千万级别的数据,索引树高度应该在3~4层,

数据行数较多时候

分表:MySQL自带的partion功能,使用的比较少了

分片:分布式架构(分库)

字段长度

业务允许,尽量选择长度短的列作为索引列

业务不允许,选择前缀索引

数据类型

对于变长长度的列来讲,使用varchar类型比char类型要有优势。对于大表而言,使用char数据类型的每个索引长度都是固定值,空格也算在索引的长度里面,而varchar不是。所以叶子结点的消耗较大,因而要选择varchar数据类型

索引的命令操作

索引查询

PRI 主键索引

MUL 辅助索引

UNI 唯一索引

use world;

查看索引

desc city;

查看索引详细信息

show index from city;

创建索引

注意,创建索引也是在线的DDL操作,操作时也会出现锁表现象。所以创建索引操作应该是业务低谷时间进行操作或者使用PTOSC这样的工具操作,减少对业务的影响

创建单列的辅助索引

use world;

为city表的name列创建索引

alter table city add index idx_name(name);

查看索引详情

show index from city;

创建联合多列的辅助索引

use world;alter table city add index idx_c_p(countrycode,population);

创建唯一索引

注意,首先需要判断创建索引的列是否存在重复值,存在重复值的列,无法创建唯一索引

use world;select count(district) from city;select count(distinct district) from city;

事实说明存在重复值,district列不应当做唯一索引

alter table city add unique index uidx_dis(district);

创建前缀索引

前缀索引和普通索引没差,只是不能使用数字作为索引列

use world;alter table city add index idx_dis(district(5));

删除索引

use world;show index from city;

mysql 批量删除索引

alter table city drop index idx_name;alter table city drop index idx_c_p;alter table city drop index idx_dis;

mysql 数据删除 索引_MySQL操作之索引创建与删除相关推荐

  1. 关于Ubuntu 16.04系统挂载硬盘以及迁移MYSQL数据存储目录的操作步骤

    转载链接 : 关于Ubuntu 16.04系统挂载硬盘以及迁移MYSQL数据存储目录的操作步骤 :https://www.jianshu.com/p/58093888ee25 本文背景: 现有项目系统 ...

  2. mysql 重置表索引_MySQL如何进行索引重建操作?

    在MySQL数据库中,没有类似于SQL Server数据库或Oracle数据库中索引重建的语法(ALTER INDEX ... REBUILD),那么在MySQL数据库中,是否有什么方式重建索引呢? ...

  3. mysql 数据舍取_mysql取舍索引

    mysql选择索引 1.尽量为用来搜索.分类或分组的数据列编制索引,不要为作为输出显示的数据列编制索引. 最适合有索引的数据列是那些在where子句中数据列,在联结子句中出现的数据列,或者是在Grou ...

  4. mysql三个字段最优索引_mysql 多列索引优化

    Mysql所有的列都可以使用索引,.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少256字 ...

  5. mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略

    索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...

  6. mysql 隐藏中间四位_MySQL知识体系——索引

    本文直切主题,针对InnoDB引擎描述索引及优化策略.在开始之前,需要读者了解: 二叉查找树(包括2-3查找树.红黑树等数据结构) MySQL的InnoDB引擎基础知识 索引初探 要了解索引,当然要了 ...

  7. mysql优化之索引_mysql优化之索引

    概念: 在数据库中除了数据之外,还维护着满足特定查找算法的数据结构.这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引.通常使用B树以及变种B+树 ...

  8. mysql实验视图及索引_MySQL视图及索引

    视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...

  9. mysql建立联合索引_mysql之联合索引

    mysql之联合索引测试: 前期准备: 建立联合索引? CREATE TABLE `test` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `aaa` var ...

最新文章

  1. Maya 2022中的硬表面建模技术学习视频教程
  2. How to enable coredump on centos 7.6
  3. http://www.cnblogs.com/Javame/p/3632473.html
  4. java 多线程 异步日志_精彩技巧(1)-- 异步打印日志的一点事
  5. SAP ABAP关键字在Chrome浏览器里高亮显示的实现原理 - How is ABAP keyword highlight implemented in Chrome
  6. 核心API最佳实践——JDK日志分级
  7. c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式
  8. java循环标号_java 标号 break 自循环
  9. 深度学习《各种归一化的区别》
  10. Android Service完全解析
  11. php apache 多进程,php多进程 防止出现僵尸进程 如何 使 apache 成为 僵尸进程
  12. 敏捷开发系列学习总结(1)——版本管理发布流程
  13. 模型集成01-Bagging/Boosting/Stacking
  14. Enterprise Library 3.0 发布
  15. 考拉Android统一弹框
  16. unity引用类型序列化_Unity中的序列化与反序列化
  17. Windows网络编程——查询本机的主机名称及IP地址(控制台应用程序)
  18. 揭秘马云帝国内幕:马云的野心有多大
  19. 编程基础知识之浮点型
  20. SiO2 介孔二氧化硅纳米颗粒的明胶包裹/二氧化硅杂化凝胶固定化醇脱氢酶/白蛋白和壳聚糖包裹的二氧化硅微球/二氧化硅包覆的量子点荧光编码微球

热门文章

  1. 华为下一代机皇曝光:全新麒麟985+55W超级快充
  2. 放弃治疗式宣传?Kindle官方自我调侃:盖Kindle 面更香
  3. OPPO首部5G手机亮相 10倍混合光学变焦技术惊艳MWC
  4. php7 编译 pdo mysql_php7 编译 pdo_mysql 问题, [mysql_driver.lo] Error 1
  5. 嵌入式Linux入门4:版本控制git的使用
  6. html语义化标签_5个你可能不知道的html5语义化标签
  7. 安卓 background的图片随着textview的大小而改变_关于CSS中的背景属性background简述...
  8. 【Elasticsearch】2021 年的顶级 ETL 工具......以及对 ETL 说“不”的理由
  9. 【Elasticsearch】为Elasticsearch启动https访问
  10. 【Flink】Flink netty 通讯 PartitionRequestClient NettyPartitionRequestClient