数据库

  1. 数据库锁
    数据库有两种,悲观锁,乐观锁
    悲观锁:数据更改时,将数据锁住,更改完成会释放,成为数据库锁机制。主要表锁,行锁,页锁。
    乐观锁:修改完成准备提交才会将数据锁住,完成更改后释放

  2. 分区分表
    什么是 mysql 分表和分区
    就是把一张表分成 N 多个小表就是分表
    分区呢就是把一张表的数据分成 N 多个区块,可以在同一个 磁盘上,也可以在不同的磁盘上
    mysql 分表和分区有什么区别呢?
    mysql 的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张 表,都对应三个文件,一个.MYD 数据文件,.MYI 索引文件,.frm 表结构文件。
    数据处理上: 分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个 的分表里面。
    提高性能上: 分表后,单表的并发能力提高了,磁盘 I/O 性能也提高了
    .mysql 分表的三种方法:
    做 mysql 集群, 预先估计会出现大数据量并且访问频繁的表, 利用 merge 存储引擎来实现分表
    分区类型: range 分区, list 分区, hash 分区, key 分区

3,应该使用哪一种方式来实施数据库分库分表,这要
看数据库中数据量的瓶颈 所在,并综合项目的业务类型进
行考虑。
单库多表 : 随着用户数量的增加,user 表的数据量会越来越大,当数据量达到一定 程度的时 候对 user 表的查询会渐渐的变慢,从而影响整个 DB 的性能。
多库多表 :随着数据量增加也许单台 DB 的存储空间不够,随着查询量的增加单台数据 库服 务器已经没办法支撑。这个时候可以再对数据库进行水平区分。

4 mysql 读写分离
绝大部分情况都是读远大于写。Mysql 提供了读写分离 的机制,所有的写操作都必须对应到 Master,读操作可以在 Master 和 Slave 机 器上进行, Slave 与Master 的结构完全一样,一个 Master 可以有多个 Slave,甚 至 Slave 下还可以挂 Slave,通 过此方式可以有效的提高 DB 集群的每秒查询率.26 所有的写操作都是先在 Master 上操 作,然后同步更新到 Slave 上,所以 从 Master 同步到 Slave 机器有一定的延迟,当系统 很繁忙的时候,延迟问题会 更加严重,Slave 机器数量的增加也会使这个问题更加严重。

5 MySQLSQL 语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orderby 涉及 的列上建立索引。
2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行 全表扫描。
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用 索引而进行全表扫描.
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引 而进行全表扫描.
5.下面的查询也将导致全表扫描: selectidfromtwherenamelike’%abc%’ 若要提高效率,可以考虑全文检索。
6.in 和 notin 也要慎用,否则会导致全表扫描,如: selectidfromtwherenumin(1,2,3)
7.如果在 where 子句中使用参数,也会导致全表扫描。因为 SQL 只有在运行时才会 解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引 而进行全表扫描。
9.应尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而 进行全表扫描.
10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系 统将可能无法正确使用索引。
11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中 的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可 能的让字段顺序与索引顺序相一致。
12.不要写一些没有意义的查询,如需要生成一个空表结构.
13.很多时候用 exists 代替 in 是一个好的选择.
14.并不是所有索引对查询都有效,SQL 是根据表中数据来进行查询优化的,当索引 列有大量数据重复时,SQL 查询可能不会去利用索引.
15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低 了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索 引需要慎重考虑,视具体情况而定.

6 数据库优化方案整理
优化分片键:
1.不要使用分区,分区性能很低,难以维护
2.不要使用主从数据库,读写分离有了缓存就再也不需要分主从了,毕竟延迟问 题是无法解决的
3如果使用分库分表,那么查询条件务必先走分片键,否则就成了全表查询,性
能超低
2、优化索引
(1)索引列务必重复度低
(2)使用索引就不能用 OR 查询,否则索引不起作用
(3)使用索引,like模糊查询不能以%开头
(4)查询条件务必以索引列开头,否则索引失效
(5)联合索引遵守最左原则
3、优化缓存 分离冷热数据,对于大内存访问评率低的数据适当分离
提高缓存命中率,命名问题
4、优化 sql

  1. 列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等
  2. 建立单列索引
  3. 根据需要建立多列联合索引
  4. 当单个列过滤之后还有很多数据,那么索引的效率将会比较低,即列的区分度较低
  5. 如果在多个列上建立索引,那么多个列的区分度就大多了,将会有显著的效率提高。
    (1) 根据业务场景建立覆盖索引只查询业务需要的字段,如果这些字段被 索引覆盖,将极大的提高查询效率
    (2) 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率
    (3) where 条件字段上需要建立索引
    (4) 排序字段上需要建立索引
    (5) 分组字段上需要建立索引
    (6) Where 条件上不要使用运算函数,以免索引失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值