文档章节

数据库知识整理笔记

RitaChen
 RitaChen
发布于 2017/03/19 15:22
字数 1933
阅读 37
收藏 0

事务的主要特性:原子性、一致性、独立性和持久性(ACID)

数据库应用优化

1、基本语句优化10个原则

1)尽量避免在列上进行运算,这样会导致索引失效

2)使用join时,应该用小结果集驱动大结果集。同时把复杂的join查询拆分成多个query

3)注意like模糊查询的使用,避免%%

4)仅列出需要查询的字段,这对速度不会有明显的影响,主要考虑节省内存

5)使用批量插入语句节省交互

6)limit的基数比较大时使用between

7)不要使用rand函数获取多条随机记录

8)避免使用NULL

9)不要使用count(id),应该使用count(*)

10)不要做无谓的排序,应尽可能在索引中完成排序

2、mysql索引建立和使用基本原则

1)合理设计和使用索引

2)在关键字的索引上,建与不建索引,查询速度相差近100倍

3)差的索引和没有索引效果一样

4)索引并非越多越好,因为维护索引需要成本

5)每个表的索引应在5个以下,应合理利用部分索引和联合索引

6)不在结果集中的结果单一的列上建索引

7)建索引的字段结果集最好分布均匀,或者符合正态分布

3、服务器和配置优化

选择存储引擎的基本原则:

1)采用MyISAM引擎:读/写>100:1且update相对较少;并发不高,不需要事务;表数据量小;硬件资源有限

2)采用InnoDB引擎:R/W比较小,频繁更新大字段;表数据量超过1000万,并发高;安全性和可用性要求高

3)采用Memory引擎:有足够的内存;对数据一致性要求不高;需要定期归档的数据

mysql服务器调整优化:

1)关闭不必要的二进制日志和慢查询日志,仅在内存足够或开发调试时打开他们

2)适度使用query cache

3)增加mysql允许的最大连接数(show variables like 'max_connections')

4)对myisam表适当增加key_buffer_size

mysq瓶颈及应对措施:

1)增加mysql配置中的buffer和cache的数值,增加服务器cpu数量和内存的大小

2)使用第三方引擎或衍生版本

3)迁移其他数据库

数据库分区

概念:所谓分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。mysql支持的分区类型包括:range(常用)、list、hash、key

分区的注意事项

1)主键或者唯一索引必须包含分区字段

2)很多时候,使用分区就不要再使用主键,可能影响性能

3)只能通过int类型的字段或者返回int类型的表达式来分区,通常用year或to_days等函数

4)每个表最多1024个分区,不可能无限制扩展分区,而且过度使用分区往往会消耗大量系统内存

5)采用分区的表不支持外建

6)分区后,可能造成索引失效,需要验证分区可行性

数据库分表

概念:分表思想和分区类似,区别是:分区是把一个逻辑文件分成几个物理文件后进行存储,而分表则是把原先宇哥表拆分成几个表。进行分表查询时,可以union或者做一个视图。分表又分为垂直切分和水平切分,其中水平切分最常用

mysql高级应用

1、mysql自增长序列(auto_increment)

可能需要使用序列的情况:

1)业务复杂,需要定制和控制主键时

2)希望手工维护自增长,方便数据迁移

3)需要业务上一个有意义的主键时,比如单据号

4)当事务跨多表,期望事务可靠性

5)主键很明确的需要和其他表关联时

6)期望主键是唯一的,不需要重复利用时

2、msql视图

概念:视图是一个虚拟表,其内容由查询定义。对其中所引用的基础表来说,视图的作用类似于筛选,筛选

当前或者其他数据库的一个或多个表

创建视图的注意事项:

1)select语句不能包含from子句中的子查询

2)select语句不能引用系统或用户变量

3)select语句不能引用预处理语句

4)在存储子程序内,定义不能引用子程序的参数或局部变量

5)在定义中引用的表或视图必须存在

6)在定义中不能引用temporary表,不能创建temporary

7)在视图定义中命名的表必须已存在

8)不能将触发程序与视图关联在一起

9)在试图定义中允许使用order by,但是,如果从特定视图进行了选择,而视图又使用了具有自己的order by的语句,他将被忽略

10)不能给视图添加索引

11)视图通常不允许更新

3、mysql存储过程和事件调度

概念:利用sql语言完成复杂的数据库层业务操作,通过编写存储过程来实现

创建存储过程步骤:

1)确定输入/输出参数和类型(IN表示输入参数,$tname是参数名,varchar(20)是参数类型)

2)定义变量和赋值(使用declare关键字定义变量,set关键字用来赋值)

3)过程的主体部分,可以是各种运算,也可以是数据库操作

4)程序的返回值。可以有返回值,也可以无返回值

优缺点:存储过程能提升效率,还具有模块化、易于复用、可以移植等特点,但mysql存储过程没有强大的调试工具,不易维护。

4、mysql模拟消息队列:

队列概念:队列和栈一样,是一种线性表结构,不过队列是一种先进先出的数据结构。队列只允许在后端进行插入操作,在前端进行删除操作。

消息队列:在消息的传输过程中保存消息的容器

消息队列管理器:将消息从它的源中继到它的目标时充当中间人的角色

队列作用:主要提供路由并保证筱梓的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到成功的传递。

消息队列作用:可以很好的异步处理数据传送和存储,当频繁地向数据库中插入数据时,就可采取消息队列异步插入。另外,可将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理。如:视频转换、发送手机短信

5、sql注入漏洞与防范:

1)如果是整型变量或字段,使用intval()函数把所有传入参数转化为一个数值

2)对于字符型变量,用addslashes()会把所有的单引号、双引号、反斜线和空字符转换为含有反斜线的溢出字符

3)转义或过滤一些特殊字符

4)保护表结构等关键信息

5)任何情况下做好安全备份

© 著作权归作者所有

RitaChen
粉丝 3
博文 17
码字总数 21495
作品 0
成都
高级程序员
私信 提问
程序员如何打造属于自己的云笔记服务

摘要: 目录 前言 介绍 安装 启动服务 使用配置 APP访问 前言 在这个互联网知识呈爆炸增长的时代,作为一个程序员要掌握的知识越来越多,然再好的记性也不如烂笔头,有了笔记我们就是可以时常...

姬子玉
2017/11/28
0
0
我就是靠这个软件实现第2职业的

今天我来分享一下我是如何利用印象笔记来做个人知识管理的。 (以下内容都是基于印象笔记来做的解说,虽然没拿钱,但是广告嫌疑很大,如有不适,请自行脑补替换成其他的软件) 如果你之前没有...

彭小六
2016/04/05
0
0
笔记 App 领导者——印象笔记

一直以来,我都认为用纸笔记笔记是一种非常有情怀的方式,有一种掌握知识的踏实感。 但是,当到了大学,我有无数种类型的大大小小的知识都需要整理归纳,而不像高中不仅仅局限于数学、英语、...

沉思CONTEMPLATE
2017/11/03
0
0
笔记 App 领导者——印象笔记

一直以来,我都认为用纸笔记笔记是一种非常有情怀的方式,有一种掌握知识的踏实感。 但是,当到了大学,我有无数种类型的大大小小的知识都需要整理归纳,而不像高中不仅仅局限于数学、英语、...

沉思CONTEMPLATE
2017/11/03
0
0
知识管理利器:幕布

前言 在这个信息爆炸时代,我们每天阅读大量的信息(微信公众号、微博、简书、今日头条、微信读书、得到 .....),阅读过后总感觉自己学习到了很多新知,但是一周过后我们能说出来的收获又有...

陈宇明
2017/08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
249
4
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
10
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部