栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySql引擎、索引

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 引擎采用的是非聚簇式设计,索引文件和数据文件不在同一个文件中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号