MySql引擎、索引
目录
- 一、MySql架构
- 1、连接层
- 2、服务层
- 3、引擎层
- 4、物理文件存储
- 二、Mysql引擎
- 1、引擎是什么?
- 2、mysql中MyiSam引擎和Innodb引擎的区别?
- 3、mysql中常见的引擎?
- 4、数据库支持的引擎语句
- 三、索引
- 1、为什么要有索引呢?
- 2、什么是索引?
- 3、索引原理
- 4、索引优势
- 5、 索引劣势
- 6、索引创建原则
- (1) 什么情况下,需要索引?
- (2)什么情况下,不建议用索引?
- 7、索引分类
- (1)主键索引
- (2)单值索引
- (3)唯一索引
- (4)组合索引(复合索引)
- 组合索引最左前缀原则
- (5)全文索引
- (6)查看索引
- 8、索引数据结构
- 三、聚簇索引和非聚簇索引
- 1、聚簇索引
- 2、非聚簇索引
一、MySql架构
1、连接层
是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。负责与客户端和程序建立连接,认证…
2、服务层
主要完成核心服务功能,sql接口,完成缓存的查询;sql的分析和优化及部分内置函数执行。也会解析查询并创建内部解析树,并完成响应的优化,确定查询表的顺序,是否用索引。查询内部缓存,在读环境中提供系统性能。sql连接 ,解析器 , 查询优化器 ,缓存
3、引擎层
负责与数据文件系统连接,读、写数据
4、物理文件存储
负责存储表数据,日志文件(非常重要,mysql事务实现就是依赖于日志的)。
DBA database admin 数据库管理员
二、Mysql引擎
1、引擎是什么?
引擎是数据库中具体与文件进行交互的技术,不同的引擎实现方式有区别的。每张表都有对应的引擎进行处理。
2、mysql中MyiSam引擎和Innodb引擎的区别?
MyiSam 不支持事务 查询多 ,不支持事务,不支持外键,不支持行锁,支持表锁,支持全文索引,存储表的总行数。select count(*) from admin 直接获取到总行数即可 ,速度快。
Innodb 支持事务 增删改多,支持事务,支持外键,表锁,行锁,支持缓存,支持全文索引,支持主键自增,适合于处理增、删、改,比较多的场景,不存储总行数。select count(*) from admin 字行统计计算 ,速度慢。
3、mysql中常见的引擎?
- MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV,6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam
4、数据库支持的引擎语句
查看支持的引擎
SHOW ENGINES;
查看表引擎
SHOW TABLE STATUS LIKE '表名'
修改引擎
mysql.ini 中
default-storage-engine=InnoDB
,重启服务.建表时指定
CREATE TABLE 表名(...)ENGINE=MYISAM;
建表后修改
ALTER TABLE 表名 ENGINE = INNODB;
MyIsam 和 InnoDB 这两种引擎生成的文件
三、索引
- 概述:数组索引,可以通过索引快速的找到某个位置的数据。
1、为什么要有索引呢?
- 不使用索引的话,查询从第一行开始,逐行向后查询,直到查询到我们需要的数据,如果数据量非常大的情况下,查询效率比较低。
2、什么是索引?
索引就类似书的目录,通过目录快速查询到我们需要的数据。
- 索引是帮助 MySQL 高效获取数据的数据结构。
排好序的快速查找的数据结构
在一个数据结构中将数据维护,方便查找。
- 左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址.为了加快 Col2 的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。
3、索引原理
- 索引类似于书的目录,借助索引,缩短查找时间,缩小查询范围。
4、索引优势
- 提高数据检索的效率,降低数据库的 IO 成本;
- 通过索引列对数据进行排序,降低数据排序的成本,降低了 CPU 的消耗;
5、 索引劣势
- 索引也需要占用硬盘空间
- 对表进行新增,修改,删除操作时,在操作数据的同时,也需要对索引信息作出修改。
6、索引创建原则
- 索引虽好,但不要乱用
(1) 什么情况下,需要索引?
- 主键自动建立唯一索引 主键索引
- 作为查询条件的列,适合创建索引(where 后面的语句)
- 外键关系建立索引
- 排序字段,将大大提高排序速度
- 分组字段
(2)什么情况下,不建议用索引?
- 表记录太少
- 经常增删改的表:提高了查询速度,同时却会降低更新表的速度,不仅要保存数据,还要保存索引文件。分表,将本来一张表拆分,读写分离。
- 不是查询条件(Where 条件里用不到的字段)
- 数据重复且分布平均的表字段,例如 :性别
7、索引分类
(1)主键索引
设定为主键后数据库会自动建立索引,不能为空,唯一的,一个表只有一个主键。
- 添加主键
ALTER TABLE 表名 add PRIMARY KEY 表名(列名);
- 删除
ALTER TABLE 表名 drop PRIMARY KEY ;
(2)单值索引
- 一个索引包含一个列,一个表可以有多个单值索引。
-创建单值索引
CREATE INDEX 索引名 ON 表名(列名);
- 删除索引:
DROP INDEX 索引名;
(3)唯一索引
数据不能重复,可以为空
CREATE UNIQUE INDEX 索引名 ON 表名(列名);
- 删除索引
DROP INDEX 索引名 ON 表名;
(4)组合索引(复合索引)
即一个索引包含多个列
- 创建复合索引
CREATE INDEX 索引名 ON 表名(列 1,列 2...);
- 删除索引:
DROP INDEX 索引名 ON 表名;
组合索引最左前缀原则
使用组合索引时,要出现最左列,否则索引失效
例如表中有abc三列,a,b两列创建组合索引
select * from table where a=’’and b=’’索引生效
select * from table where b=’’and a=’’索引生效
select * from table where a=’’and c=’’索引生效
select * from table where b=’’and c=’’索引不生效
- 模糊查询也将会全表扫描,会导致name列的索引失效,like的模糊查询不建议使用:
select id from t where name like '%abc%,
(5)全文索引
- 需要模糊查询时,一般索引无效,这时候就可以使用全文索引了。
CREATE FULLTEXT INDEX 索引名 ON 表名(字段名) WITH PARSER ngram;
CREATE FULLTEXT INDEX dept_name ON dept(Dept_name) WITH PARSER ngram;
SELECT 结构 FROM 表名 WHERE MATCH(列名) AGAINST(搜索词')
SELECT * FROM dept WHERE MATCH(dept_name) AGAINST('研发部')
(6)查看索引
SHOW INDEX FROM 表名;
8、索引数据结构
mysql 和 Innodb 引擎默认使用B+树,作为数据结构存储索引。
- 排好序的,一个节点可以存储多个数据.
- 非叶子节点不存储数据,只存储索引,可以放更多的索引.
- 数据记录都存放在叶子节点中.
- 所有叶子节点之间都有一个链指针
B+树,索引是用来加快查询速度的,B+树对数据进行排序提供查询速度,一个节点能存储多个元素,是平衡树,所以不会太高,并且叶子节点之间有指针,支持全表扫描。
三、聚簇索引和非聚簇索引
1、聚簇索引
- 找到了索引,就找到了数据,就是聚簇索引。
主键可以直接找到数据,根据学号查询学号,可以直接命中学号,此种场景学号就是聚簇的。
SELECT NO FROM student WHERE NO = 123
MySQL 中 InnoDB 引擎的索引和文件是存放在一起的,找到索引就可以找到数据,是聚簇式设计.
2、非聚簇索引
找到了索引,但没有找到数据,需要根据主键再次回表查询。
根据学号查询学号、姓名,虽然学号加了索引,但是还需要查询姓名,需要根据学号找到主键,通过主键回表查询,此种场景就是非聚簇的。MyISAM 引擎采用的是非聚簇式设计,索引文件和数据文件不在同一个文件中。
MySql引擎、索引相关推荐
- 数据结构与索引-- mysql InnoDB存储引擎索引
索引与算法 索引是我们在应用开发过程中程序数据可开发的一个重要助力.也是一个重要的研究方向,索引太多,应用的性能可能受到影响,如果索引太少,对查询性能又会有制约.我们需要找到一个合适的平衡点,这个对性 ...
- 数据库---mysql的索引和引擎
mysql 的索引和引擎 mysql的数据都是存放在磁盘上的,都说索引会使查询变快,那么肯定是索引用了特殊的数据结构. 常见的数据结构有: hash hash就是咱们在hashMap中的那个hash, ...
- mysql存储引擎 索引优化_MySQL存储引擎,索引及基本优化策略
存储引擎 与Oracle, SQL Server这些数据库不同,MySQL提供了多种存储引擎.什么是存储引擎?存储引擎其实就是一套对于数据如何存储,查询,更新,建立索引等接口的实现.不同存储引擎特性有 ...
- WebDay19 MySQL存储引擎 索引 锁 集群
MySQL存储引擎 索引 锁 集群 一.MySQL存储引擎 1.MySQL体系结构 2.MySQL存储引擎 3.常用引擎的特性对比 4.引擎的操作 5.总结:引擎的选择 二.MySQL索引 1.索引的 ...
- 面试官问:为什么MySQL的索引不采用Kafka的索引机制
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 第一眼看到这个问题,也是很迷惑的,谁没事会问这种问题.然而,事实上 ...
- 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...
- MySQL · 引擎分析 · InnoDB行锁分析
前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...
- 为了把mysql的索引底层原理讲清楚,我把计算机翻了个底朝天
来自:非科班的科班 什么是索引 概念:索引是提高mysql查询效率的数据结构.总的一句话概括就是索引是一种数据结构. 数据库查询是数据库的最主要功能之一.设计者们都希望查询数据的速度能尽可能的快,因此 ...
- mysql多索引结构_MySQL 索引结构
谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...
最新文章
- centos查看特定程序占用端口情况
- Gear 360新款发布!预购有礼哦
- vCenter6.0配置二:配置HA群集
- 手机屏幕物理点击器是什么原理_手机屏幕为什么能触控 手机屏幕触控介绍【详解】...
- VTK:参数Kuen用法实战
- SAP CRM呼叫中心的轮询设置CRMCMP_IC_FRAME SAM queue receiver
- 由浅入深,聊聊权限设计
- C# 观察者模式 以及 delegate 和 event
- mysql mode_MYSQL中的sql_mode模式
- Java拷贝(赋值、浅拷贝、深拷贝)
- Spark cluster 安装
- excel 两组数据交点_让科研人相见恨晚的技巧,用Excel做柱状图、箱型图及数据分析!(转载自ZSCI)...
- linux系统命令 回顾2
- 【染上你的颜色】MMD动作+镜头下载
- k8s的优势和部署模式
- 《好好学习·成甲》教你如何学习学习
- 小苹果音乐用计算机怎么打,小苹果苗语版歌曲-计算器音乐简谱,比如一些流行歌曲小苹果等等之类的?...
- Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create
- oracle表增量同步到hive分区表
- Microsoft Edge浏览器一款不同于传统IE的浏览器
热门文章
- 关于BP神经网络模型的学习思考
- 数据库面试题(选择题)
- 塑料疑云还是认知返祖?从荣耀9X看大小手机厂商之间的天堑
- 基本的SELECT语句的练习(MySQL)(SQLyog)
- ROS基础---ros通信、ros发布者publisher、publisher.cpp、Talker.cpp
- 【C语言】判断输入是否能被5整除
- matlab矩阵输出txt文件中,matlab怎么把矩阵输出到txt
- 2021年全球和中国美妆个护现状分析,高端化趋势明显,国产品牌亟待发展「图」
- 再批国标数学教材的微分定义
- _getch()函数的一些使用方法