1、先来了解下MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

2、MySQL常见的存储引擎及其它们之间的区别

首先要知道MySQL中有两种类型的存储引擎:事务性非事务性

存储引擎 特点
InnoDB 提供了事务安全(ACID兼容)表,支持外键引用完整性约束。它支持提交、回滚和紧急恢复功能来保护数据。它还支持行级锁定。当在多用户环境中使用时,它的“一致非锁定读取”提高了性能。它将数据存储在集群索引中,从而减少了基于主键的查询的I/O。
MyISAM 该存储引擎的特点就是查询速度快、存储空间小,原因是在磁盘上分成三个文件存储:.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储索引),SELECT COUNT(*) FROM TABLE时,避免了全表扫描。但是MyISAM不支持事务,也不支持外键,写入时是表锁,所以适合查询多、写入少的业务场景。
Mermory Memory表至少比MyISAM表要快一个数量级,因为所有的数据都保存在内存中,不需要进行磁盘I/O。Memory表的结构在重启以后还会保留,但数据会丢失。
Archive Archive是归档的意思,在归档之后很多的高级功能就不再支持了,仅仅支持最基本的插入和查询两种功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就开始支持索引了。Archive拥有很好的压缩机制,它使用zlib压缩库,在记录被请求时会实时压缩,所以它经常被用来当做仓库使用。比如:由于高压缩和快速插入的特点Archive非常适合作为日志表的存储引擎,但是前提是不经常对该表进行查询操作。
3、MySQL索引

索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。可以说索引优化应该是对查询性能优化最有效的手段,创建一个真正最优的索引经常需要重写SQL查询语句。

但这并不代表索引越多越好;下面就来说说MySQL中索引的优缺点:
优点:
我们大家都知道,索引可以让MySQL快速地查找到我们所需要的数据,但这并不是索引的唯一作用。
最常见的B-Tree索引,按照顺序存储数据,所以,MySQL可以用来做Order By和Group By操作。因为数据是有序存储的,B-Tree也就会把相关的列值都存储在一起。最后,因为索引中也存储了实际的列值,所以某些查询只使用索引就能够获取到全部的数据,无需再回表查询。据此特性,总结出索引有如下三个优点:
a)、索引大大减少了MySQL服务器需要扫描的数据量,加快查询速度。
b)、索引可以把随机I/O变为顺序I/O。
c)、索引可以帮助服务器避免排序和临时表。
索引并不总是最好的工具,也不是说索引越多越好。总的来说,只要当索引帮助存储引擎快速找到记录带来的好处大于其带来的额外工作时,索引才是有用的。
对于非常小的表,大部分情况下简单的全表扫描更高效,没有必要再建立索引。对于中到大型的表,索引带来的好处就非常明显了。
缺点:
a)、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
b)、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值。
c)、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

那么综合MySQL索引的优缺点不难得出:并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。下面总结下索引的使用原则及其需要注意的事项:

  1. 对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引;
  2. 数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果;
  3. 在不同值少的字段上不要建立索引,比如用户表中的"性别"字段上只有男,女两个不同值。相反的,在不同值较多的字段上可以建立索引;
  4. 数据类型越小越好。数据类型越小,在磁盘、内存和CPU缓存中需要的空间更少,处理速度更快;
  5. 数据类型越简单越好。整形优于字符串,内置日期和时间优于字符串;
  6. 尽量避免NULL;
  7. 复合索引将最常用作限制条件的列放在最左边,依次递减;
  8. 复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的;
  9. 短索引。对串列进行索引,如果可能应该指定一个前缀长度,不仅可以提高查询速度而且可以节省磁盘空间和I/O操作;
  10. mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
  11. 使用NOT IN和!=操作,mysql将无法使用索引。
  12. 不要在列上进行运算,where字句的查询条件里使用了函数将不会使用索引。

接着就让我们来看看MySQL中索引的类型都有哪些:

  • 常规索引
    常规索引,也叫普通索引(index或key),它可以常规地提高查询效率。一张数据表中可以有多个常规索引。常规索引是使用最普遍的索引类型,如果没有明确指明索引的类型,我们所说的索引都是指常规索引。

  • 主键索引
    主键索引(Primary Key),也简称主键。它可以提高查询效率,并提供唯一性约束。一张表中只能有一个主键。被标志为自动增长的字段一定是主键,但主键不一定是自动增长。一般把主键定义在无意义的字段上(如:ID),主键的数据类型最好是数值。

  • 唯一索引
    唯一索引(Unique Key),可以提高查询效率,并提供唯一性约束。一张表中可以有多个唯一索引。(允许存在空值(只允许存在一条空值))

  • 组合索引
    指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用

这里解释下最左前缀:
组合索引就是遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀;举个简单的例子来说明下吧:比如我们创建(id,name,birth)这样的一个组合索引,那么相当于对id列进行排序,也就是我们创建组合索引,以最左边的为准,只要查询条件中带有最左边的列,那么查询就会使用到索引

  • 全文索引
    全文索引(Full Text),可以提高全文搜索的查询效率,一般使用Sphinx替代。但Sphinx不支持中文检索,Coreseek是支持中文的全文检索引擎,也称作具有中文分词功能的Sphinx。实际项目中,我们用到的是Coreseek。

注意⚠️:
1、5.6版本之后InnoDB存储引擎开始支持全文索引,5.7版本之后通过使用ngram插件开始支持中文。
2、目前只有char、varchar,text列上可以创建全文索引。
3、 like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询

  • 外键索引
    外键索引(Foreign Key),简称外键,它可以提高查询效率,外键会自动和对应的其他表的主键关联。外键的主要作用是保证记录的一致性和完整性。

注意⚠️:只有InnoDB存储引擎的表才支持外键。外键字段如果没有指定索引名称,会自动生成。如果要删除父表(如分类表)中的记录,必须先删除子表(带外键的表)中的相应记录,否则会出错。 创建表的时候,可以给字段设置外键,如 foreign key(cate_id) references cms_cate(id),由于外键的效率并不是很好,因此并不推荐使用外键,但我们要使用外键的思想来保证数据的一致性和完整性。

未完待续。。。

关于MySQL,你应该掌握哪些?相关推荐

  1. mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间

    先贴一张图! 第一步,"很重要" 在mysql中,有一个创建之初自带的库information_schema,这个库中包含着数据库相关信息,查询数据占用空间就是使用该库,所以首先进 ...

  2. mysql并发更新数据,多用户并发修改数据解决方案。

    mysql并发更新数据,多用户并发修改数据解决方案. 在系统中,有一些如余额.资产.积分的数据,是要保证数据一致性的.如,一个人使用两个设备同时进行消费操作,如何保证数据一致性的问题. 我们一起来思考 ...

  3. mysql查询字段大小写结果相同,mysql大小写查询不敏感,mysql5.7查询不区分大小写解决方案。

    下面有两条sql,主键查询,在mysql中查询到的结果相同. SELECT* FROM USER WHEREid = 'EM58hdK4nXC';SELECT* FROM USER WHEREid = ...

  4. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  5. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  6. docker一步安装mysql,docker的魅力就在于此

    正常来说,使用docker安装东西的步骤是serach它有没有,然后pull它 这里其实只要一步(如果你没有安装过.没有端口占用等问题的话!!) $ docker run -d -p 3306:330 ...

  7. 设置腾讯云linux服务器中 MySQL 允许远程访问

    申请了一台linux腾讯云服务器,想要把数据库搭建在上面,本地的Windows直接可以访问 以下就是具体的操作流程,首先你需要安装好一个mysql,安装方法–>mysql安装(Linux) 接着 ...

  8. Linux安装mysql,一步到位!

    今天在腾讯云上面买了一个服务器,想要把自己的项目部署一下,就要安装mysql,以下是我的安装步骤,在网上有很多人把install敲错了,还有的少-get,种种错误试完之后,我决定发一篇 sudo ap ...

  9. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  10. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

最新文章

  1. Tomcat server.xml配置文件介绍
  2. CentOS7 安装 Gitlab
  3. android调用flutter aar_Flutter原生混合开发
  4. ConcurrentHashMap的源码分析-为什么要做高低位的划分
  5. [].slice.call(arguments)模拟实现 Array.of
  6. 右移函数(字符串,数组)
  7. js 利用事件委托解决mousedown中的click
  8. 物联网安全白皮书_天翼物联网安全白皮书发布 有方科技参与编纂
  9. python绘制缓和曲线_曲线标
  10. Visual studio2022 利用glfw+glad配置OpenGL环境
  11. 回程静态路由及trunk简单链路
  12. Maven入门教程(十七)-Maven多Moudle项目创建
  13. 虚拟机linux环境的地址怎么映射给局域网内其他电脑访问
  14. 极客日报:HarmonyOS 2.0用户数升至5000万;腾讯起诉抖音侵权《王者荣耀》,获赔60万?抖音:没侵权,已上诉!
  15. 【Linux】修改文件或文件夹权限的命令
  16. html 判断是否是数字,判断是否是数字或者是否是整数.html
  17. 自己感觉这个是最经典的FLASH~
  18. 20190517考试ocp052碰到的题目
  19. 小猪存钱罐 完全背包
  20. VSCode 同步设置及扩展插件 实现设备上设置统一

热门文章

  1. export,sorce
  2. 文件的读写,写入数据,读取数据,写文本 UltraEdit
  3. 3dmax2019卸载/安装失败/如何彻底卸载清除干净3dmax2019注册表和文件的方法
  4. 【内核链表】数据结构——深入理解内核链表的概念和操作笔记
  5. 常见标点符号的英文表达
  6. 泰坦尼克号—数据分析(单因素、多因素分析)
  7. 计算机黑科技ppt英文,微软黑科技:PPT全文翻译
  8. 计算机云教室管理制度,云网络智慧教室建设及配套设备方案
  9. android.view.InflateException Error inflating class
  10. 高度近视的并发症成为中国45-59岁工作年龄层失明的主要原因