MySQL学习笔记(五)—— 索引存储引擎
索引&存储引擎
- 一、MySQL存储引擎介绍
- 1、什么是数据库存储引擎
- 2、如何查看引擎
- 建表时指定引擎
- 修改表的引擎
- **MyISAM和InnoDB的区别**
- 二、索引
- 1、什么是索引
- 2、索引的优点
- 3、索引的缺点
- 4、索引的常见类型
- index:普通索引
- unique:唯一索引
- primary key:主键索引
- foreign key:外键索引(外键约束 + 一般索引)
- fulltext: 全文索引
- 组合索引(联合索引、复合索引)
- 5、索引注意点总结:
一、MySQL存储引擎介绍
1、什么是数据库存储引擎
数据库引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,以获得对应的特性和功能。
虽然叫做数据库引擎,但是其实是作用在表级别的。
2、如何查看引擎
show engines;-- 查看当前数据表的引擎
show create table 表名\G-- 查看当前库所有表的引擎
show table status\G
建表时指定引擎
create table qsr(id int,name varchar(20))
engine='InnoDB'
DEFAULT CHARSET=utf8;
修改表的引擎
alter table 表名 engine='MyISAM';修改默认引擎
vim /etc/my.cnf[mysqld]
default-storage-engine=MyISAM
-- 还需要重启mysql服务
MyISAM和InnoDB的区别
- MyISAM支持全文索引(full text) 不支持事务;表级锁;保存表的具体行数;崩溃恢复不好,不支持外键索引 InnoDB
- 支持事务;5.6以前的版本不支持全文索引;行级锁;不保存表的具体行数;崩溃恢复好
- 总结:如何选择存储引擎
- 不需要事务,计算较多的count:使用MyISAM
- 要求可靠性高,要求使用事务。使用InnoDB
二、索引
1、什么是索引
索引是一个单独的,存储在磁盘中的数据库结构,它们包含着对数据表里的所有记录的引用指针。使用索引可以快速的找到某列或者多列中特定值的行。
面试官:为啥加了索引查询会变快?本质是空间换时间
2、索引的优点
- 通过创建唯一索引,来保证数据库表中的每一行数据的唯一性。
- 可以加快数据的检索速度。
- 可以保证表数据的完整性和准确性。
3、索引的缺点
- 索引需要占用物理空间
- 对表中的数据进行改动时,索引页需要跟着动态维护,降低了数据的维护速度。
4、索引的常见类型
index:普通索引
允许出现相同的索引内容,允许null值
unique:唯一索引
不允许出现相同的索引内容,允许null值
-- 第8行就是创建索引使用的
create table test (id int(7) zerofill auto_increment not null,username varchar(20),servnumber varchar(30),password varchar(20),createtime datetime,primary key (id) -- 创建了一个主键索引 -- index (id) 创建一个普通索引-- unique (id) 创建一个唯一索引
)DEFAULT CHARSET=utf8;-- 直接为表添加索引
alter table 表名 add index 索引名称(字段名称)-- 直接创建索引
语法:create index 索引 on 表名 (字段名);
eg:create index index_createtime on test (createtime);-- 查看索引
语法:show index from 表名\G
eg: show index from test\G-- 如何删除索引
语法:drop index 索引名称 on 表名;
eg:drop index unique_username on test;语法:alter table 表名 drop index 索引名;
eg:alter table test drop index createtime;
primary key:主键索引
把主键添加索引就是主键索引,它是一种特殊的唯一索引,不允许有空值,
而唯一索引(unique是允许为空值的)。指定为“PRIMARY KEY”
主键:主键是表的某一列,这一列的值是用来标志表中的每一行数据的。
注意:每一张表只能拥有一个主键
--创建主键:
--1)创建表的时候创建
--2)直接为表添加主键索引语法:alter table 表名 add primary key (字段名);eg:alter table test add primary key (id);--删除主键:
语法:
alter table 表名 drop primary key;
eg:
alter table test drop primary key;注意:在有自增的情况下,必须先删除自增,才可以删除主键
删除自增:alter table test change id id int(7) unsigned zerofill not null;
foreign key:外键索引(外键约束 + 一般索引)
外键就是作用于两个表数据之间的链接的一列或多列,
用来保证表与表之间的数据的完整性和准确性。
-- 添加外键约束:
-- 语法:foreign key (字段名) references 关联的表名(关联表的字段名)
-- 注意:主键跟外键的字段类型一定要相-- create table的方法:
CREATE TABLE `employee` (`empno` int(11) NOT NULL COMMENT '雇员编号',`ename` varchar(50) DEFAULT NULL COMMENT '雇员姓名',`job` varchar(30) DEFAULT NULL,`mgr` int(11) DEFAULT NULL COMMENT '雇员上级编号',`hiredate` date DEFAULT NULL COMMENT '雇佣日期',`sal` decimal(7,2) DEFAULT NULL COMMENT '薪资',`deptnu` int(11) DEFAULT NULL COMMENT '部门编号',PRIMARY KEY (`empno`),foreign key (deptnu) references dept(deptnu)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- alter table的方法:
alter table employee add foreign key (deptnu) references dept(deptnu);-- 删除外键约束
-- 注意:在干掉外键索引之前必须先把外键约束删除,才能删除索引
mysql> alter table employee drop index deptnu;
ERROR 1553 (HY000): Cannot drop index 'deptnu': needed in a foreign key constraintmysql> alter table employee drop foreign key employee_ibfk_1;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0mysql> alter table employee drop index deptnu;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
注意点总结:
(1)俩个表,主键跟外键的字段类型一定要相同
(2)要使用外键约束表的引擎一定得是InnoDB引擎,MyISAM是不起作用的
(3)在干掉外键索引之前必须先把外键约束删除,才能删除索引
fulltext: 全文索引
= 5.6版本以后InnoDB引擎也支持,但对中文的处理并不好
全文索引就是将存储在数据库中的文章或者句子等任意内容,都可以快速查找出来的索引,单位是词。
全文索引也是目前搜索引擎中使用的一种关键技术。
-- 给command 表的instruction列 添加全文索引
alter table command add fulltext(instruction);-- 使用全文索引
select * from 表名 where match (字段名) against ('检索内容');
-- 在command 表中的instruction列 查找'sections'内容
select * from command where match(instruction) against ('sections');-- 查看‘directory’ 这个搜索词与字段名2里边的词 匹配度:
select 字段名1,match(字段名2) against ('directory') from 表名;
-- 对比like模糊查询,效率对比比较明显-- in boolean mode 模式:这里语法也有很多,不过多展开
-- 学习链接: https://blog.csdn.net/notbaron/article/details/78567407
-- in boolean mode:意思是指定全文检索模式为布尔全文检索(简单可以理解为是检索方式)
select * from 表名 where match (字段名) against ('检索内容' in boolean mode);-- 搜索command 表的 instruction字段列中,包含abc的数据
select * from command where match(instruction) against('abc*' in boolean mode);
-- 使用通配符*时,只能放在词的后边,不能放前边。-- +号相当于是一定要出现
-- 空格的意思是并且,多条件
-- -号相当于是一定不能出现
-- 匹配包含 但不包含 任意以rope 开始的词的行select note_text from productnotes where match(note_text) against ('heavy -rope*' in boolean mode);-- 删除全文索引:
alter table command drop index instruction;
全文索引注意点:
1、一般情况下创建全文索引的字段数据类型是char、varchar、text 。其它字段类型不可以
2、全文索引不针对非常频繁的词做索引。比如is,no,not,you,me,yes这些,称之为停止词。 3、对英文检索时忽略大小写
组合索引(联合索引、复合索引)
是建立在两列或多列以上的索引
-- 怎么来创建联合索引?
alter table 表名 add index(字段1,字段2,字段3);
alter table test add index(username,servnumber,password);-- 怎么删除联合索引?
alter table test drop index username;-- 为什么要使用联合索引,而不使用多个单列索引?
-- 联合索引的效率远远高于单列索引
-- 尝试多个模糊查询and查询,和将这几列联合在一起进行设置联合索引,进行效率对比-- 组合索引最终也是利用单列索引进行工作,数据库会进行对比执行效率选择最终使用的单列索引
- 联合索引的最左原则
不管组合起来的字段有多少个,都是以最左侧(创建索引时)的字段为核心字段,
也就是说,如果查询条件中没有这个核心字段,就不会使用索引查询。
5、索引注意点总结:
- 索引并非越多越好,过多的索引会增加数据的维护速度还有磁盘空间的浪费。
- 当表的数据量很大的时候,可以考虑建立索引。
- 表中经常查数据的字段,可以考虑建立索引。
- 想要保证表中数据的唯一性,可以考虑建立唯一索引。
- 想要保证俩张表中的数据的完整性跟准确性,可以考虑建立外键约束。
- 经常对多列数据进行查询时,可以考虑建立联合索引。
MySQL学习笔记(五)—— 索引存储引擎相关推荐
- MySQL学习笔记之五:存储引擎和查询缓存
一.存储引擎 1.InnoDB ⑴InnoDB是基于聚簇索引建立的,基于主键索引查询时,性能较好:它的辅助索引中必须包含主键列:因此,若表上的索引较多,为节约空间,主键应尽可能小 ⑵InnoDB支持自 ...
- mysql 存储引擎的选择_MySQL学习笔记(四):存储引擎的选择
一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...
- mysql原生建立索引_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- mysql 查找相似数据_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- mysql 学习笔记--存储引擎、索引、sq优化
全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...
- MySQL学习笔记--常用存储引擎InnoDB与MyISAM总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.MyISAM 特性 1. 并发性与锁级别 2. 表损坏修复 3. MyISAM表支持的索引 4. MyISAM表支持压缩 ...
- MySQL学习笔记 04、MySQL进阶(索引、事务、锁)
文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...
- 《MySQL技术内幕:InnoDB存储引擎》第2版笔记
第1章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件. MySQL数据库由后台线程以及一个共享内存区组成. My ...
- MySQL学习笔记-主键索引和二级索引
文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...
最新文章
- getaddrinfo()函数详解
- 给url添加时间戳,解决浏览器缓存
- linux 查看服务器网络连接,1.3.2 查看Linux服务器的网络连接(2)
- SDNU 1507.E.The Binding of Isaac
- redhat/centos 搭建svn服务器环境
- redis学习篇(九)-----高级特性之事务处理
- kubernetes快速部署及常用命令
- 西门子主程序调用子程序_西门子S7-200系列PLC子程序的调用方法
- 《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】
- linux编写的员工管理系统,员工信息管理系统设计与实现(叶晖).doc
- bootice添加黑苹果引导_2019款小米air12.5完美黑苹果10.15.6macOS CatalinaEFI
- win10设置任务栏全透明、免安装第三方软件
- 地图学(何宗宜版)知识点整理
- 使用Cloudflare API动态解析域名IP
- 大连开发区中老年运动微信群_大连跑步微信群
- 基于IPv6的5G专网终端身份认证技术与应用
- cpp设计并实现大整数
- Codeforces - Pokémon Army
- Lettuce: Connection to xxx not allowed. This partition is not known in the cluster view.
- 数据库的内外链接和左右链接