MySql教程

MySQL索引及优化

本文主要是介绍MySQL索引及优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

CREATE USER '用户名'@'%' IDENTIFIED BY '密码' 创建新用户

GRANT ALL PRIVILEGES ON 数据名.* TO 'l用户名'@'%' 给新用户授权

常见的SQL语句优化

一、针对SQL语句的优化

​ 1、查询语句中尽量不使用 *。

​ 2、尽量减少子查询,使用关联查询(left join,right join,inner join)代替。

​ 3、减少使用in或者not in,使用exists,not exists或者关联查询语句代替。

​ 4、使用union或者union all代替or查询(确认没有重复数据或者不用剔除重复数据时,union all 性能更好,解释器不用在扫描一遍表挑选重复)。

​ 5、建表的时候能使用数字类型字段就不要使用字符串,数字类型的字段作为子查询条件比字符串快。

​ 6、那些能过滤掉最大数记录的条件必须写在where子句的最末尾。

​ 7、查询字段很多的情况下,慎用distinct关键字,会大大降低查询效率。

​ 8、定义字段时,尽量使用varchar而不是char。定义一个char[10]和varchar[10],如果存进去是'abcd',那么char所占的长度依然为10,除了字符'abcd'外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。char的存取要比varchar快得多,因为其长度固定,方便程序的存储与查找;

二、DDL:(Data Definition Language)数据库定义语言,它是定义数据库的语言。

​ DML:(Data Manipulation Language)数据库操纵语言,它是对数据库进行操作的语言,查询和更新等操作。

三、索引的作用:创建索引可以提高系统的性能

​ 优:加快数据检索;可保证数据唯一;

​ 缺:创建和维护索引需要时间;占空间。

四、视图:一种虚拟的表,具有和物理表相同的功能,我们一般做查询(视图查询相较于多表查询

​ 更容易获取数据)。

五、MySQL中的char和varchar的区别:(重点)

​ 1、char表示定长,固定长度,varchar表示变长,即长度可变。

​ 2、存储的容量不同,对char来说,最多能存放的字符个数为255,和编码有关。

​ 而varchar最多能存放65532个字符。

六、适合索引的字段

​ 唯一、不为空、经常被查询的字段

七、视图的优缺点

​ 优点:1、对数据库的访问,因为视图可以有 选择性的选取数据库里的一部分。

​ 2、用户通过简单的查询可以从复杂查询中得到结果。

​ 3、维护数据的独立性,视图可从多个表检索数据。

​ 4、对于相同的数据可产生不同的视图。

​ 缺点:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据。

八、主键和外键的区别

​ 主键在本表中是唯一的、不可为空的;

​ 外键可以重复、可以为空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

九、数据库三范式

​ 第一范式:1NF——列不可再分

​ 第二范式:2NF——行可以唯一区分,主键约束

​ 第三范式:3NF——表的非主属性不能依赖于其他表的非主属性 ,外键约束 ,

​ 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上。

十、union和union all的区别

​ UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运 算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。

​ UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

​ 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

十一、order by与group by的区别

​ order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

十二、主键和外键

​ 主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。

​ 主键在本表中是唯一的、不可为空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

十三、内连接、外连接、交叉连接、笛卡尔积等​ 1、内连接: 只连接匹配的行。

​ 2、左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全 部匹配的行。

​ 3、右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。

​ 4、全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。

​ 5、交叉连接 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配。

十四、MySQL各种索引区别:​ 普通索引:最基本的索引,没有任何限制​ 唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。​ 主键索引:它 是一种特殊的唯一索引,不允许有空值。 ​ 全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。​ 组合索引:为了更多的提高MySQL效率可建立组合索引,遵循”最左前缀“原则。创建复合索引时,应该将最常用(频率)作限制条件的列放在最左边,依次递减。

十五、视图的可更新性和视图中查询的定义有关系,哪些类型的视图是不可更新的。​ 1、包含一下关键字的SQL语句:聚合函数(sum,min,max,count等),distinct,group by,having,union或者union all.

​ 2、常量视图。

​ 3、select中包含子查询。

​ 4、join

​ 5、from一个不能更新的视图

​ 6、where句子的子查询引用了from句子中的表

​ 8、删除视图:drop view 视图名称

备注:

​ 1、可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据

​ 2、视图不是表,不保存数据,只是一张虚拟的表,源表的数据发生变化后,视图的结果也同步发生变化

​ 3、一般情况下,在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。

这篇关于MySQL索引及优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!