数据库补充

  • 数据库引擎及区别
    innodb:执行行级锁和表级锁和事务(要成功都成功,要失败都失败)
    myisam:速度更快,支持全文索引,一般不会用,会另外做全文搜索引擎。
  • 事务特性
    原子,持久,一致
  • 数据锁
    mysql中怎么给数据加的锁:

直接select是没有锁的,开启事务时才加的锁,释放锁用commit
begin
select * from xxx for update
commit

用户1:

在这里插入图片描述
用户2:
在这里插入图片描述
用户2等在这了,等用户1commit后就能运行。如何直接写select 没有影响。
如果查询整个表数据,整个表都锁上了,
如果查询一条数据,只锁定一条数据。
应用场景:
crm 当一个用户申请客户时,别人申请不了,

sql语句

  • 分组group by 分组后having
  • join 联表
    left join 左连接,全称:left outer join如果谁在前谁就是主表,主表的数据全都会展示,另外一个是连接表,
    inner join 把空值的行删掉,如果没有空值和left join 一样
    right join 以右边的为主表,

在这里插入图片描述

  • 索引
    作用:
    约束,加速查找
    约束:
    主键
    唯一
    联合唯一
    加速查找:
    建立目录,通过索引快速找到数据
    数据表存在硬盘,如果对某列创建索引,会再硬盘上对这列另外创建一个数据结构(文件)存这列的索引数据,索引怎样加速查找呢?
    如果要查某个表的某一列,不到这个表去查,因为会比较多的数据,使用索引查(where name = ‘Lau’),直接定位到‘Lau’这个硬盘位置取出数据,如果没有索引,就全表扫描,从第一行开始找,效率比较低。所以数据量大,索引优势更明显。数据表是没行每行存的,索引是按特殊数据结构存储的,
    在这里插入图片描述
    毕加树存储结构
    如把name这列创建索引,把所有name变成数字,按数字大小堆放到文件中,name = ’Lau’ Lau变成了数字,在索引中查,
    这个表存的是地址,根据地址拿到数据,数据查找十分快。2的32次方4294967196,最多有这么多数据,最差32次就找到了
    成本:物理存储的成本占硬盘,更新成本(删除,增加,修改)
    在这里插入图片描述
    哈希索引
    把数据库变成字典,速度块,代价key不能重复。
    所以一般数据迁移从一个服务器导出脚本时,把索引文件剔除调,到下一个数据库时,数据生成后,再统一加索引
  • 索引种类
    主键:非空,不重复,单列
    唯一:不重复,可以一个为空,单列
    普通:单列
    联合主键:多列
    联合唯一索引:多列
    联合索引:多列
    覆盖索引:不是真实的索引,无须去物理表中,再索引表中拿到想要的数据
    索引合并:多列索引,多个单列索引,用户名和密码联合索引。一个索引文件。用户做个索引,密码做个索引。两个索引文件,多个单列索引去查找数据,叫索引合并
  • 联合索引想要命中索引应遵循:最左前缀原则
    name,email,pwd --》做一个联合索引,必须遵循从最左边开始,通过name,通过name,email,通过name,email,pwd,通过name, pwd都可以,不可以:email,或email,pwd
  • 存储过程:数据分析,dba,orical需要写存储过程。
  • 触发器
  • 视图
  • 程序如何抗高并发(数据库的优化的方式)
    对于开发的代码可以通过多进程或多线程完成,但如果请求来很多
    数据库支持的并发不够
    对数据库进行读写分离
    所有发来的请求都去数据库操作,加入读可以支持3000并发量,写支持6000并发量,程序卡在读上了,可以多安装一台服务器,装一模一样的数据库,通过配置两者直接的通信,保证数据一致。一个读,一个写。请求基本上读取多写少,一个承载3000读,一个承载3000读,并写。可以同时承载6000并发,不够可以加数据库
    方式二:
    分库分表
    数据库进行划分,一个数据库表越多,管理的数据越来越多,同时找他的人越多,速度比较满,这个数据库1000张表,分5个数据库,每个数据库200张表。
    分表:针对特别大的那张表,如查账单时展示最近三个月,历史跳到另外一页查,默认查时显示近三个月的那种表,另外页面跳到另外一个表,也叫垂直分表
    水平分表:列如果很多,常用的是3列,onetoone,查询速度快
    方式三:
    使用单表(数据冗余),提供查询速度。提高并发
    foreignkey
    硬盘存的数量比较少,节省硬盘,利于选择。
    单表查询速度比联表查询速度块,牺牲硬盘,提升用户感受。数据冗余。
    -方式四:
    缓存
    redis
    对于数据库经常查的数据,不放数据库,再买台服务器,内存较大,放热点数据库中的数据到内存,查询速度十分快。实时性不好,但速度很快。
    博客园,增加完标签后,刷新主要看不到增加的标签,数据库有,5分钟缓存数据失效,去数据库把数据放到缓存,给用户一份,下一次再刷新就可以看到了,优势:提高用户访问,劣势:实时性没办法保证。提高效率:修改时就更新缓存。
    程序抗并发
    负载均衡
    缓存区并发较多,再创建一个缓存
  • 数据库优化
    索引加速查找:创建并命中索引
    固定长度往前放
    name age phone:依据:习惯
    name:变长,age:固定长度,phone:固定长度
    age,phone放前面,
    数据库是放在一个物理表的,
    常见且不修改的数据放内存:
    Django的choices 男,女 ,存内存,联表查询时比较慢,
    数据库存数字1 2
    少些select *,把一行数据拿到,网络通讯把数据发过来,还不用,
    用哪列写哪列,
    创建索引并命中索引
  • char和varchar的区别
    char定长的字符,char(50)-----> 50个字符
    varchar 变长
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值