索引&存储引擎

  • 一、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学习笔记(五)—— 索引存储引擎相关推荐

  1. MySQL学习笔记之五:存储引擎和查询缓存

    一.存储引擎 1.InnoDB ⑴InnoDB是基于聚簇索引建立的,基于主键索引查询时,性能较好:它的辅助索引中必须包含主键列:因此,若表上的索引较多,为节约空间,主键应尽可能小 ⑵InnoDB支持自 ...

  2. mysql 存储引擎的选择_MySQL学习笔记(四):存储引擎的选择

    一:几种常用存储引擎汇总表 二:如何选择 一句话:除非需要InnoDB 不具备的特性,并且没有其他办法替代,否则都应该优先考虑InnoDB:或者,不需要InnoDB的特性,并且其他的引擎更加合适当前情 ...

  3. mysql原生建立索引_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  4. mysql 查找相似数据_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  5. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  6. MySQL学习笔记--常用存储引擎InnoDB与MyISAM总结

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.MyISAM 特性 1. 并发性与锁级别 2. 表损坏修复 3. MyISAM表支持的索引 4. MyISAM表支持压缩 ...

  7. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

  8. 《MySQL技术内幕:InnoDB存储引擎》第2版笔记

    第1章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件. MySQL数据库由后台线程以及一个共享内存区组成. My ...

  9. MySQL学习笔记-主键索引和二级索引

    文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...

最新文章

  1. getaddrinfo()函数详解
  2. 给url添加时间戳,解决浏览器缓存
  3. linux 查看服务器网络连接,1.3.2 查看Linux服务器的网络连接(2)
  4. SDNU 1507.E.The Binding of Isaac
  5. redhat/centos 搭建svn服务器环境
  6. redis学习篇(九)-----高级特性之事务处理
  7. kubernetes快速部署及常用命令
  8. 西门子主程序调用子程序_西门子S7-200系列PLC子程序的调用方法
  9. 《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】
  10. linux编写的员工管理系统,员工信息管理系统设计与实现(叶晖).doc
  11. bootice添加黑苹果引导_2019款小米air12.5完美黑苹果10.15.6macOS CatalinaEFI
  12. win10设置任务栏全透明、免安装第三方软件
  13. 地图学(何宗宜版)知识点整理
  14. 使用Cloudflare API动态解析域名IP
  15. 大连开发区中老年运动微信群_大连跑步微信群
  16. 基于IPv6的5G专网终端身份认证技术与应用
  17. cpp设计并实现大整数
  18. Codeforces - Pokémon Army
  19. Lettuce: Connection to xxx not allowed. This partition is not known in the cluster view.
  20. 数据库的内外链接和左右链接

热门文章

  1. 无法启动 IIS Express Web 服务器
  2. ThingsBoard架构及技术栈
  3. 讲解机器人的功能有哪些?
  4. 2021年起重机械指挥考试资料及起重机械指挥模拟考试题
  5. 面试阿里,京东,百度,快手归来,三年Java开发总结了这些经验
  6. 简单的Kali Linux学习教程
  7. 【机器学习sklearn】两个例子轻松搞懂核密度估计KernelDensity
  8. 金三银四裁员潮?你工作找到怎么样?
  9. 扎克伯格、元宇宙和性
  10. python 动图_【Python】知乎回答下载神器,图片/视频/gif动图均可下载