建立索引的原则:
1.建立索引的列的重复度不能太高
2.条件列不能参与计算
3.不能使用函数
4.条件中不能使用范围
5.不要使用like '%c'
6.条件中用or
a=0 or b=1 or c=2 or d=4 只要其中一列没有索引就无法命中
7.最左前缀(a,b,c,d) 只适用于and条件的列,如果出现范围,从出现范围的字段开始就失效,必须带着最左侧的列
只要不带a就无法命中索引
a = 1 or b = 2 无法命中索引
a = 1 and b>100 a可以命中索引 b,c,d无法命中
a>200 无法命中索引 因为联合索引一旦使用范围,从使用范围开始之后的索引都不生效
跨域问题:
https://blog.csdn.net/yup1212/article/details/87633272
协议+域名+端口 唯一去掉一个域
跨域的安全问题:通过拿到正常cookie,伪装请求(csrf token)
解决跨域:
1:jsop:本质上是 前后端约定一个函数规范,前端传入callback函数名,后端输出的数据,是包装在这个函数名里面。(特数据的数据结构),限制:get请求
2:后端返回头,加入允许跨域的标识。
3:前端服务器转发,
数据库事务隔离级别
读未提交
读已提交
不可重复度读
欢读
Spring 事务传播
7个传播级别:
常见的的:
requered,如果有事务,则加入,如果没事务,则创建
Support:是否使用当前事务,如果没有事务,则按非事务执行
Mandatory:则抛错
Requeired_new:新建事务,如果当前存在当前事务,则挂起
Not_support:以非事务的形式执行操作,1:存在当前事务,则挂起,Never:2:如果存在当前事务,则抛出异常
总结:是否有事务?是否使用当前事务?新建事务?非事务执行?
订单-买家-卖家 分表规则设计
要求:允许 卖家、买家单独查看订单。
难点:如果以订单+买家+卖家组合为分表建, 卖家、买家 都无法单独查询
思路:冗余数据,买家+订单、卖家+订单,订单+卖家+买家。。。
分布式锁
锁超时策略:redession:watch dog
可重入:key设计
可靠性:互斥、死锁(过期)、容错、自旋重试(+超时)。
幂等建设计
要求:如何区分出 是重试还是2次提交?
题目:
如果一个用户分两次下单,购买的商品都是一样的。
第一次请求:user1:购买一个商品product1;
第二次请求:user1:还是购买一个商品product1;
思路:
1:全局唯一键,在创建订单前生成,并通过DB的唯一性约束做幂等
2:根据全局唯一建,读取流水表+订单,如果有,则幂等返回。