MySQL相关知识点

版权声明:珞羽飘凌 https://blog.csdn.net/lingluo110700/article/details/85634255
InnoDB表引擎
	默认事务性引擎,最重要最广泛的存储引擎,性能非常优秀
	数据库存储在共享表空间,可以通过配置分开
	对主键查询的性能高于其他类型存储引擎
	内部做了很多优化,从磁盘读取数据时自动在内存构建hash索中插入数据时自动构建插入缓存区
	通过一些机制和工具支持真正的热备份
	支持崩溃后的安全恢复
	支持行级锁,支持外键
MyISAM表引擎
	5.1版本前,MyISAM是默认的存储引擎
	拥有全文索引,压缩,空间函数
	不支持事务和行级锁,不支持崩溃后的安全回复
	表存储在两个文件: .myd和.myi
	设计简单,某些场景下性能很好
	其他表引擎
	Archive	Blackhole	CSV	Memory
	优先选择InnoDB
MySQL锁机制
	表所是日常开发当中常见的问题,因此也是面试中最常见的考察点,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题
	共享锁和排它锁,其实就是读锁和写锁
读锁
	共享的,不堵塞,多个用户可以同时读一个资源,互不干扰
写锁
	排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取重在写入的资源
锁粒度
	表锁:系统性能开销最小,会锁定整张表,MyISAM使用表所
	行锁:最大程度地支持并发处理,但是也带来了最大的锁开销,InnoDB实现行级锁
MySQL事务处理
	MySQL提供事务处理的表引擎:InnoDB
	服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种存储引擎不靠谱
	在非事务的表行执行事务操作MySQL不会发出提醒,也不会报错
存储过程
	为以后的使用而保存的一条或多条MySQL语句的集合
	存储过程就是业务逻辑和流程的结合
	可以在存储过程中创建表,更新数据,删除等等
使用场景
	通过把处理封装在容易使用的单元中,简化复杂的操作
	保证数据的唯一性
	简化对变动的管理
MySQL触发器使用场景
	可以公国数据库中的相关表实现级联更改
实时监控某张彪中的某个字段的更改而需要作出相应的处理某些业务编号的生成等
	滥用会造成数据库及应用程序的维护困难
MySQL索引的基础
	索引类似于书记的目录,想要找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码
	存储引擎使用类似的方式进行数据查询,先去索引当中找到相对应的值,然后根据匹配的索引找到对应的数据
索引对性能的影响
	大大减少服务器需要扫描的数据
	帮助服务器避免排序和临时表
	将随机I/O变顺序I/O
	大大提高查询速度
降低写的速度,占用磁盘
索引的使用场景
	对于非常小的表,大部分情况下全表扫描效率更高
	中到大型表,所以你非常有效
	特大型的表,建立和使用索引的代价将随之增长,可以使用分区技术来解决
索引的类型
	索引有很多种类型,都是事先在存储引擎层的
	普通索引:最普通的索引,没有任何约束限制
	唯一索引:与普通索引类似,但是具有唯一性的约束
	主键索引:特殊的唯一索引,不允许有空值
一个表只能有一个主键索引,可以有多个唯一索引
主键索引一定是唯一索引,唯一索引不是主键索引
主键可以与外键构成参照完整性约束,防止数据不一致
组合索引:将多个列组合在一起创建索引,可以覆盖多个列
外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性,完整性和实现级联操作
全文索引:MySQL自带的全文索引只能用于MyISAM,并且只能对英文进行全文检索
原则
1.	最合适索引的列是出现在where子句中的列,或链接子句仲德列而不是出现在select关键字后的列
2.	索引列的基数越大,所以你的效果越好
3.	对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间
4.	根据情况创建符合索引,符合索引可以提高查询效率
5.	避免创建过多索引,索引会额外占用磁盘空间,降低些操作效率
6.	主键尽可能选择较短的数据类型,可以有效减少所以你的磁盘占用提高查询效率
联合查询
	SELECT * FROM A UNION SELECT * FROM B UNION……
	就是把多个结果集集中在一起,UNION前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并
	如果使用UNION ALL,不会合并重复的记录行
	MySQL的注意事项
1.	符合索引遵循前缀原则
2.	Like查询,%不能在前,可以使用全文索引
3.	Column is null可以使用索引
4.	如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引
5.	如果or前的条件中的列有索引,后面的没有,索引都不会被用到
6.	列类型是字符串,查询时一定要给值加引号,否则索引无效
六中关联查询
	交叉连接(CROSS JOIN)		
内连接(INNER JOIN) 
外链接(LEFT JOIN/RIGHT JOIN)	
联合查询(UNION与UNION ALL)
全连接(FULL JOIN)

猜你喜欢

转载自blog.csdn.net/lingluo110700/article/details/85634255