Mysql--回顾提要
一、写在前
知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了!
二、来辣!
MyISAM表把自增主键最大id记录到文件,重启也不会丢。InnoDB记录到内存,重启数据库和OPTIMIZE操作会丢。
Heap表存在于内存,用于临时高速存储。BLOB和TEXT不允许,只能=<>>=<=;不支持自增,索引不可为NULL。
InnoDB支持的4中隔离级别,及逐级之间的区别。
BLOB和TEXT区别:对BLOB值进行排序和比较大小时区分大小写,对TEXT值不区分。
每个MyISAM表以三个文件存储在磁盘:表定义:“.frm”;数据文件:“.MYD”(MYDATA);索引文件:“.MYI”(MYINDEX)。
MySQL表格类型:MyISAM、Heap、Merge、InnoDB、ISAM。5.5之前默认引擎是MyISAM,5.5开始是InnoDB。InnoDB是.frm;.ibd(索引和数据)
MySQL优化DISTINCT:DISTNCT在所有列上转换为GROUP BY,并与ORDER BY子句结合使用。
单个索引最多使用16列创建。
允许6种触发器,增删改的前、后。before update
强制关机或断电可能会导致数据表损坏。
MyISAM支持表锁;InnoDB支持表锁、行锁,默认行锁。还有一个页面锁,粒度在中间。
MySQL查询缓存弊端:频繁更新的表,一更新就失效,不安逸。8.0版本被删了。
MyISAM和InnoDB区别:InnoDB支持行锁、事务、多版本并发控制(MVVC)、外键、聚集索引;MyISAM支持全文索引,InnoDB部分版本不支持(可使用Sphinx插件)。
通过整库备份+binlog可以恢复半个月前日志,前提有备份和日志。
优化:尽量使用主键查询:聚簇索引上存储了全部数据,相比普通索引,减少了回表的消耗;MySQL5.6之后引入了索引下推优化,适当使用联合索引,减少回表消耗;若频繁查询某一列,考虑利用覆盖索引避免回表;最左原则:联合索引将高频字段放最左边。
数据库三范式:1属性不可再分(每列只有一个值);2每行可以被唯一区分(加主键);3不含其它表已包含了的非主键信息。
limit offset由于扫描过多数据越往后查询越慢。存在有序id时:可配合当前页最后一条id进行查询,where id > #{id} limit #{limit}。
数据量越来越大导致查询慢:分库分表,根据时间拆分,id最好包含时间(如雪花算法),这样既能根据id直接获取,也能按照时间进行查询。
char和varchar区别:char长度固定为声明长度,1~255,存储时用空格填充,检索时删除。
候选键和主键:超键(学号+姓名)(学号)。候选键(学号)。主键(学号)。外键(学号在另一张表做外键)。不含多余属性的超键=候选键。我从候选键中选一个作为主键。
数据增量大调优:允许数据冗余,避免join查询;字段类型和存储引擎合理,适当添加索引;主从读写分离;合理分表,减少单表数据量提高查询速度;添加缓存;不用select *;
锁的优化:读写分离;分段加锁;减少锁持有时间;多线程尽量按顺序获取锁;锁不能过度细化,避免频繁加锁和释放。
索引底层和优化:B+树,在所有叶子节点增加了指向下一个叶子节点的指针,所以InnoDB建议大部分表使用自增主键作为主索引。
索引失效:以%开头的like语句;OR语句前后没有同时使用索引;数据类型隐式转换(varchar不加单引号可能转成int型)
优化MySQL:语句与索引;数据库表结构;系统配置;硬件。
优化数据库:选取合适的字段属性,减少字段宽度,尽量设置成not null,省份、性别设置成ENUM;使用join代替子查询;使用联合(UNION)代替手动创建的临时表;事务处理;锁定表,优化事务处理;适用外键,优化锁定表;建立索引;优化查询语句。
索引是一种特殊文件,InnoDB的索引是表空间的一部分,包含对数据表里所有记录的引用指针。普通索引唯一任务是加快对数据的访问速度,允许重复值;唯一索引保证数据的唯一性,可以null;主键是特殊的唯一索引,不能为null,用PRIMARY KEY创建;联合索引。
防止SQL注入:用#不用$;过滤关键词update、insert、delete、select、*;SQL语句尽量不省略双引号和单引号;数据库表名和字段名命名技巧,防止被猜;开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置;执行 sql 语句时使用 addslashes 进行 sql 语句转换。
数据定义DDL: Create Table,Alter Table,Drop Table, Craete/Drop Index 等;数据操纵DML: Select ,insert,update,delete;数据控制DCL: grant,revoke ;数据查询DQL: select
MVCC:并发版本控制:相当于为每个修改保存一个版本,版本与事务时间戳关联,读操作只读
该事务开始前的数据库快照。它是通过数据库记录中的隐式字段Undo日志、Read Riew操作实现的。好处:并发读写数据库的时候,提高速度;实现读一致性,解决脏读、幻读、不可重复度问题;采用乐观锁或悲观锁操作解决写和写的从冲突。
三、写在后
只是简要知识点概括,看到就能回忆起相关内容为最妙~~直接评论打卡,开整!!!
Mysql--回顾提要的更多相关文章
- mysql 回顾小练习
Student(id,sname,age,sex) 学生表 Course(id,cname,t_id) 课程表 SC(s_id,c_id,score) 成绩表 Teacher(id,Tname) 教师 ...
- MySQL回顾
一. 对数据库的操作 1. 创建一个库 create database 库名 create database 库名 character set 编码 创建带有编码的 查看编码: 2. 删除一个库 dr ...
- MySQL 基础回顾
mysql 回顾 数据库的设计必须满足三范式 1NF: 强调列的原子性,列不可拆分 eg: 一张表(联系人) 有(姓名,性别,电话)三列,但是现实中电话又可分为家庭电话和公司电话,这种表结构设计就不符 ...
- MySQL快速回顾:数据库和表操作
前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...
- Mysql学习笔记(八)由触发器回顾外键约束中的级联选项
近些天都没有写博客.在学习mysql的知识,通过学习和练习,也熟悉了mysql的函数.触发器.视图和存储过程.并且在实际的开发过程中也应用了一小部分.效果还是十分理想的. 今天晚上在学习触发器模仿in ...
- 回顾:Linux环境 Mysql新建用户和数据库并授权
回顾:Linux环境 Mysql新建用户和数据库并授权 一.新建用户 //登录Mysql @>mysql -u root -p @>密码 //创建用户 mysql> insert i ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- MySQL快速回顾:更新和删除操作
前提要述:参考书籍<MySQL必知必会> 6.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE: 更新表中特定的行: 更新表中所有的行. U ...
- 快速回顾MySQL:简单查询操作
利用空闲时间花几分钟回顾一下 7.1 检索数据 为了查询出数据库表中的行(数据),使用SELECE语句. 格式: # 第一种 SELECT * FROM <table_name>; # 第 ...
随机推荐
- 创建.NET程序Dump的几种姿势
当一个应用程序运行的有问题时,生成一个Dump文件来调试它可能会很有用.在Windows.Linux或Azure上有许多方法可以生成转储文件. Windows平台 dotnet-dump (Windo ...
- ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署 0.前期准备 注意:以下几件事都必须在激活虚拟环境下完成 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requireme ...
- Terminal(oh-my-zsh) 美化
如果你使用Mac进行开发,那么Terminal.app应该是你使用非常频繁的app了.初体验Terminal时你可能觉得单调乏味,阅读密密麻麻的内容也很费劲.但是如果你跟着我一起配置它,就会发现你平时 ...
- perl哈希嵌套和引用的使用
数组,哈希嵌套 数组,哈希的引用 1.哈希的嵌套和引用 %hash = ( 'group1', {'fruit', 'banana', 'drink', 'orange juice', 'vegeta ...
- c++小练习——黑白棋
没什么好发的,发给黑白棋水一水,如果有人能发现问题就更好了. /* Othello.cpp 黑白棋,实现随时结束并判断胜负的功能 成功运行于Visual Studio 2013 */ #include ...
- IOS AND Android 配置Fiddler环境
下载:http://rj.baidu.com/soft/detail/10963.html?ald 运行Fiddler点击Tools: 选择设置选项: 1. 选择HTTPS新选项卡. 2. ...
- c3 linearization详解
MRO MRO 全称方法解析顺序(Method Resolution Order),在多重继承和多继承存在的时候,寻找属性及方法的顺序. 深度优先(DFS)与广度优先(BFS) python2 所用的 ...
- python安装dlib库报错
问题描述 我是debain 系的linux系统没遇到这个问题,在centos系统遇到的 Collecting dlib Downloading http://mirrors.cloud.aliyunc ...
- 老板:你为什么要选择 Vue?
大家好,我是 Kagol,Vue DevUI 开源组件库和 EditorX 富文本编辑器创建者,专注于前端组件库建设和开源社区运营. 假如你是团队的前端负责人,现在老板要拓展新业务,需要开发一个 We ...
- angr_ctf——从0学习angr(三):Hook与路径爆炸
路径爆炸 之前说过,angr在处理分支时,采取统统收集的策略,因此每当遇见一个分支,angr的路径数量就会乘2,这是一种指数增长,也就是所说的路径爆炸. 以下是路径爆炸的一个例子: char buff ...