随手杂记

随手杂记

1、如何保证幂等性?

分布式系统中,可以通过下面三个方式来保证幂等性:
1.在每个请求上添加唯一标识,比如订单支付时,增加一个订单id,同一个订单id只能处理一次;2.在数据库中添加记录,比如微信回调后,修改订单状态,或者增加记录流水号,这样微信每次回调时,接口先进行查库判断,如果已经存在记录,就直接返回;3.增加一个redis中间件,其实这个类似单机系统中的map,我们每次处理完一个请求后,将该请求的唯一id记录在redis中,下次该请求再来请求时,因为redis已经存在该记录的key,就不再处理。

2、索引失效的10种场景,太坑了

 

 

3.索引的建立原则, 如何避免索引失效

解析:

一. 索引的建立原则

索引的设计需要遵循一些已有的原则, 这样便于提升索引的使用效率, 更高效的使用索引.

1. 对查询频次较高, 且数据量比较大的表, 建立索引.

2. 索引字段的选择, 最佳候选列应当从where子句的条件中提取, 如果where子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合.

3. 如果where后有多个条件经常被用到, 建议建立符合 索引, 复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引.

复合索引命名规则 index_表名_列名1_列名2_列明3

比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)

复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引. 最左前缀法则后面会详细介绍~

3. 使用唯一索引, 区分度越高, 使用索引的效率越高.

4. 索引并非越多越好, 如果该表赠,删,改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率.

5. 使用短索引, 提高索引访问时的I/O效率, 因此也相应提升了Mysql查询效率.

6. 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率.

7. 排序字段上, 因为排序效率低, 添加索引能提高查询效率.

 

二.如何避免索引失效

1.  遵循最左前缀法则

如果在查询的时候, 使用了复合索引, 要遵循最左前缀法则, 也就是查询从索引的最左列开始, 并且不能跳过索引中的列.如果不包含最左边的索引列, 则其他索引不生效;如果包含了最左边的索引列, 但是跳过了一列直接索引了复合索引的第三列, 则第三列的索引不生效.

2. 不要在索引上使用运算, 否则索引也会失效.

3. 字符串不加引号, 造成索引失效.

4. 尽量使用覆盖索引, 避免select *, 这样能提高查询效率.

5. or关键字连接

用or分割开的条件, 如果or前面的列有索引, or后面的列没有索引, 那么查询的时候索引会失效, 如果一定要用or查询, 可以考虑下or连接的条件列都加索引, 这样就不会失效了.

6. like模糊查询

在使用like模糊查询时, 如果like%也就是%加在后面索引不会失效, 如果%lik或%like%也就是%加在前面, 索引会失效.

如果查询的列占整张表的绝大多数, 那么就会全表扫描, 不会走索引. 所以在查询的时候走不走索引不能百分百肯定.

也就是说如果查找一个稀有数据, 如果建立了索引, 就会走索引. 如果查询的数据表达绝大多数都符合条件, 就全表扫描, 不走索引.

 

posted on 2021-11-01 15:21  鲁班快跑  阅读(35)  评论(0编辑  收藏  举报