关于MYSQL

一、事务的特性:
1.原子性,事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行
2.一致性,几个并行执行的事务,其执行结果与按某一顺序串行执行的结果相一致
3.隔离性,事务的执行不受其他事务的干扰,该事务执行的中间结果对其他事务必须是透明的
4.持久性,对于任意已提交事务,系统必须保证该事务对数据库的改变而不被丢弃,即使数据库出现故障

二、Mysql存储过程的原理:
储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。存储过程通常有以下优点:
1)存储过程能实现较快的执行速度。
2)存储过程允许标准组件是编程。
3)存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
4)存储过程可被作为一种安全机制来充分利用。
5)存储过程能够减少网络流量。

存储过程存储了一系列sql语句,使得简化了操作,不要求重复执行一系列操作。只需要在需要的时候调用一下存储过程就行了。

三、数据库索引:
是数据库管理系统中一个排序的数据结构,以协助快速排序。更新数据库表中数据。
索引的实现通常使用B_TREE, B_TREE索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

四、数据库优化查询效率

1.存储引擎选择,如果数据表需要事务处理,应该考虑使用InnoDB,因为它完全符合ACID特性。

如果不需要事务处理,使用默认存储引擎MyISAM是比较明智的。

2.分表分库,主从。

3.对查询进行优化,要尽量避免全表扫描,首先应考虑在where 及 order by 涉及的列上建立索引。

4.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃索引而进行全表扫描。

5.应尽量避免在where子句中使用 != 或 <> 操作符, 否则将导致引擎放弃索引而进行全表扫描。

6.应尽量避免在where子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引将导致引擎放弃索引而进行全表扫描。

7.Update语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

8.对于多张大数据量(几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

五、Mysql 集群的优缺点

优点:

 99.999%的高可用性

 快速的自动失效切换

 灵活的分布式体系结构,没有单点故障

 高吞吐量和低延迟

 可扩展性强,支持在线扩容

缺点:

 存在很多限制,比如:不支持外键

 部署、管理、配置很复杂

 占用磁盘空间大、内存大

 备份和恢复不方便

 重启的时候,数据节点将数据 load 到内存需要很长的时间

六、用的 Mysql 是哪个引擎,各引擎之间的区别

主要 MyISAM 与 InnoDB 两个引擎,其主要区别如下:

InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一 些列增删改中只要哪个出错还可以回滚还原,而 MyISAM 就不可以了;

MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;

InnoDB 支持外键,MyISAM 不支持;

MyISAM 是默认引擎,InnoDB 需要指定;

InnoDB 不支持 FULLTEXT 类型的索引;

InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB需要扫描一遍整个表来 计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表;

对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字 段一起建立联合索引;

清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建 表;

InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'

七、数据库的优化

1.优化索引、SQL 语句、分析慢查询;

2.设计表的时候严格根据数据库的设计范式来设计数据库;

3.使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘 IO

4.优化硬件;采用 SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等

5.采用 MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率;

6.垂直分表;把一些不经常读的数据放在一张表里,节约磁盘 I/O;

7.主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来;

8.分库分表分机器(数据量特别大),主要的的原理就是数据路由;

9.选择合适的表引擎,参数上的优化

10.进行架构级别的缓存,静态化和分布式;

11.不采用全文索引;

12.采用更快的存储方式,例如 NoSQL 存储经常访问的数

八、Mysql 数据库分区、分表        

分表可以通过三种方式:Mysql 集群、自定义规则和 merge 存储引擎。

分区有四类:

RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

LIST 分区:类似于按 RANGE 分区,区别在于 LIST 分区是基于列值匹配一个离散值集合中的某个 值来进行选择。

HASH 分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的 这些行的列值进行计算。这个函数可以包含 MySQL 中有效的、产生非负整数值的任何表达式。

KEY 分区:类似于按 HASH 分区,区别在于 KEY 分区只支持计算一列或多列,且 MySQL 服务器 提供其自身的哈希函数。必须有一列或多列包含整数值。

九、Mysql 数据库中分页

select * from table limit (start-1)*limit,limit; 其中 start 是页码,limit 是每页显示的条数。

十、数据库负载均衡

负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路 由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台 具有超高性能的独立服务器。

1、 实现原理 实现数据库的负载均衡技术,首先要有一个可以控制连接数据库的控制端。在这里,它截断了 数据库和程序的直接连接,由所有的程序来访问这个中间层,然后再由中间层来访问数据库。这样, 我们就可以具体控制访问某个数据库了,然后还可以根据数据库的当前负载采取有效的均衡策略, 来调整每次连接到哪个数据库。

2、 实现多据库数据同

对于负载均衡,最重要的就是所有服务器的数据都是实时同步的。这是一个集群所必需的,因 为,如果数不据实时、不同步,那么用户从一台服务器读出的数据,就有别于从另一台服务器读出 的数据,这是不能允许的。所以必须实现数据库的数据同步。这样,在查询的时候就可以有多个资 源,实现均衡。比较常用的方法是 Moebius for SQL Server 集群,Moebius for SQL Server 集群 采用将核心程序驻留在每个机器的数据库中的办法,这个核心程序称为 Moebius for SQL Server 中间件,主要作用是监测数据库内数据的变化并将变化的数据同步到其他数据库中。数据同步完成 后客户端才会得到响应,同步过程是并发完成的,所以同步到多个数据库和同步到一个数据库的时 间基本相等;另外同步的过程是在事务的环境下完成的,保证了多份数据在任何时刻数据的一致性。 正因为 Moebius 中间件宿主在数据库中的创新,让中间件不但能知道数据的变化,而且知道引起 数据变化的 SQL 语句,根据 SQL 语句的类型智能的采取不同的数据同步的策略以保证数据同步成 本的最小化。

数据条数很少,数据内容也不大,则直接同步数据。数据条数很少,但是里面包含大数据类型, 比如文本,二进制数据等,则先对数据进行压缩然后再同步,从而减少网络带宽的占用和传输所用 的时间。

数据条数很多,此时中间件会拿到造成数据变化的 SQL 语句, 然后对 SQL 语句进行解析,分 析其执行计划和执行成本,并选择是同步数据还是同步 SQL 语句到其他的数据库中。此种情况应用 在对表结构进行调整或者批量更改数据的时候非常有用。

3、 优缺点 优点:

1) 扩展性强:当系统要更高数据库处理速度时,只要简单地增加数据库服务器就 可以得到扩展。 2) 可维护性:当某节点发生故障时,系统会自动检测故障并转移故障节点的应用,保证数据库的持 续工作。

3) 安全性:因为数据会同步的多台服务器上,可以实现数据集的冗余,通过多份数据来保证安全性。 另外它成功地将数据库放到了内网之中,更好地保护了数据库的安全性。

4) 易用性:对应用来说完全透明,集群暴露出来的就是一个 IP

缺点:

a) 不能够按照 Web 服务器的处理能力分配负载。

b) 负载均衡器(控制端)故障,会导致整个数据库系统瘫痪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值