mysql索引相关理解
1.索引是高效获取数据的数据结构,
2.唯一索引,索引值不重复unique
create unique index 索引名 on 表名(字段)
alter table 表名 add unique index 索引名(字段)
3.主键索引 唯一索引的一种 primary key
create table 表名(id int not null primary auto_increament)type=myism
4.单列索引和多列索引(复合索引)
复合索引用最左前缀的概念
5.聚簇索引
索引中键值的逻辑顺序决定表中的物理顺序,聚簇索引决定表中的物理顺序
innodb主键就是聚簇索引,myisam没有聚簇索引
6.show index from 表名 查看表的索引
key_name ->索引类型 column_name ->索引字段
cardinality ->索引基数 平均数组值=基数/总行数 越接近1表示越可能用到索引
index_type -> 索引结构 fulltext b+tree
7.b-tree性质
m阶b-tree
ki表示关键字 k1<k2<k3<k4<k5<k6<k7<k8<kn 左子结点关键字的值<右子节点关键字的值
pi表示指向子节点指针 左指针指向左节点 右指针指向右节点 p1指向值<k1<p2指向值<k2
所有关键字必须唯一(myisam和innodb必须建主键的原因)
节点-》 每个节点最多有 m 个子节点
根节点若非是叶子节点最少有两个子节点
非根非叶子节点至少有m/2个子节点
关键字-》根节点关键字个数1-(m-1)
非根非叶子节点关键字(m/2-1) - (m-1)
关键字数 +1 =指针数
b+tree是b-tree的变体 关键字数 = 指针数
8.myisam的索引结构
myisam索引采用b+tree结构存储数据,索引指针指向键值地址,地址存储数据
myisam的索引和数据是分离的 索引保存在 表名.myi 数据保存在 biaoming.myd文件
9.innodb索引结构
innodb索引结构跟myisam有明显区别 索引和数据存储在一起
支持事务-》三行隐藏数据列 db_row_id db_row_ptr db_row_id
主键索引保存数据 辅助索引保存主键的值 -》索引主键索引越短越好,这样辅助索引也就越小
10.myisam和innodb比较
myisam支持全文索引,顺序存储,索引叶子节点保存数据地址,辅助索引和主键差不多
innodb支持事务,主键节点直接保存数据,辅助索引保存主键索引的值
myisam键值分离 索引载入内存 innodb 键值保存在一起,索引和数据一起载入innodb缓冲池
11.mysql的优化
表数据类型
-》尽量小-》使用能正确表示的最短的数据类型存储-》减少磁盘空间 内存 cpu使用
-》避免使用null count统计列时会忽略null的行 不会用到索引
-》尽量使用整型 int(1)和int(11)是一样的
sql优化
-》复合索引的最左前缀原则, where字段要和索引顺序保持一致
-》复合索引会用到非第一列出现范围的一列 之后不会用到索引 第一列出现范围也不会用到索引
-》or会遍历全表不会用到索引
mysql索引相关理解的更多相关文章
- mysql 索引相关
引言: MYSQL由于其免费和开源的性质,在项目中用处广泛.大家都知道,一个MySQL数据库能够储存大量的数据,如果要在大量的数据中查找某一个数据,如果使用全表检索的话,即费时间又费力气,这时,就需要 ...
- 面试小知识:MySQL索引相关
前言 本模板主要是一些面试相关的题目,对于每一道问题,我会提供简单的解答,答案的来源主要是基于自己看了各方资料之后的理解,如果有错的,欢迎指点出来. 1. 什么是最左前缀原则? 以下回答全部是基于My ...
- mysql 索引相关知识
由where 1 =1 引发的思考 最近工作上被说了 说代码中不能用 where 1=1,当时觉得是应该可以用的,但是找不到什么理据, 而且mysql 语句优化这方面确实很薄弱 感觉自己mysql ...
- mysql索引相关
索引有主键索引.唯一索引.普通索引 单列索引,复合索引. 复合索引(a,b,c),可以理解是有三个索引,分别是a.b.c三个索引 前缀不是a的话,复合索引都不起作用,前缀用函数或者是范围,比如< ...
- mysql 索引相关问题
mysql中key .primary key .unique key 与index区别 https://blog.csdn.net/nanamasuda/article/details/5254317 ...
- 简单聊一下对MySQL索引的理解?
一.索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 二.索引能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要. 索引能够轻易将查询性能提高好几个数量级, ...
- Mysql索引深入理解
一. 引言 Mysql 我们平常用的很多,了解的很多,今天别的不说,直接说mysql的底层是什么,说到底层,就想到数据结构,那么,mysql的数据结构是什么呢? 是B + tree .那么数据库中的 ...
- 面试官:小伙子,你给我说一下你对MySQL索引的理解吧
一.索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 二.索引能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引能够轻易将查询性能提高好几个数量级,总 ...
- 【逐步完善】MySql索引相关
在表中对某个字段添加索引: alter table tablename add index (columnname);
随机推荐
- vue本地项目静态资源管理
vue本地项目静态资源管理 统一放在src/static里面css,images,js index.html里面使用重置样式 <link rel="stylesheet" h ...
- linux FTP 操作
1.登陆: ftp 172.xxx.xxx.xxx 按提示输入用户名和密码 2.上传: 单个文件:put /路径/文件名 批量: 输入 prom 此命令是关闭交互(否则总是询问你是否要上传) 输入下载 ...
- Sumlime text3 安装包、汉化包、注册码
Sumlime text3 安装包.汉化包.注册码 http://files.cnblogs.com/files/panmy/%E5%9C%86%E8%A7%92.rar
- SQL Plus常用命令
1.常用命令:显示当前用户名:show user登录到数据库:conn[etc] 用户名/密码@网络[as sysdba / as sysoper] 简单写法:conn 用户名/密码 con ...
- PHP 中使用explode()函数切割字符串为数组
explode()函数的作用:使用一个字符串分割另一个字符串,打散为数组. 例如: 字符串 $pizza = "第1 第2 第3 第4 第5 第6"; 根据空格分割后:$piece ...
- Linux系统下超级用户密码的修改
1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x (具体编辑内容为下图:删除倒数第三行 ...
- JDBC的步骤
使用jdbc步骤 a.导入数据库厂商提供的驱动程序(导入jar包) b.加载驱动程序 Class.forName("驱动程序类") c.获得连接 Connection conn=D ...
- How to choose the number oftopics/partitions in a Kafka cluster?
How to choose the number oftopics/partitions in a Kafka cluster? 如何为一个kafka集群选择topics/partitions的数量? ...
- 使用HslCommunication实现PLC数据的远程客户端监视,以及web端实时监视,远程操作设备示例
前言 本文主要是演示一个例子,服务器后台程序从PLC采集数据,并推送给在线客户端显示,以及推送给web端进行实时的显示,还支持远程操作,支持安卓端的同步监视和远程操作,关于HslCommunicati ...
- Git详解之十 Git常用命令
下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一. ...