- 博客(17)
- 资源 (1)
- 收藏
- 关注

原创 sql 中count 在innodb 和myisam 表类型的查询快慢
在sql中经常会用到count(*) 或者不常用的count(‘列’),在innodb和myisam 的查询速度有多大,原理又是什么?下面我们首先唠唠myisam和innodb主要区别1).MyISAM是非事务安全型的,而InnoDB是事务安全型的。2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定。3).MyISAM支持全文类型索引,而InnoDB不支持全文索引。4).My...
2018-09-30 13:15:05
1470
原创 MySQL索引原理深度剖析与优化
文章目录一、概念篇索引是什么 ?索引的优势和劣势二、数据结构篇B+结构(改造B树)等值查询:范围查询三、索引实现MyIsam索引根据主键等值查询数据:根据主键范围查询数据:辅助索引InnoDB索引主键索引(聚簇索引)等值查询数据:辅助索引组合索引如何优化?平常建索引需要注意什么?一、概念篇索引是什么 ?1. 官方介绍索引是帮助MySQL高效获取数据的数据结构。能加快数据库的查询速度。2. 常见索引有聚集索引、覆盖索引、组合索引、前缀索引、唯一索引。索引的优势和劣势优势:1. 可以提高数据检索
2021-08-31 11:14:55
507
原创 MySQL主从原理及保证数据一致性问题
一.MySQL主从原理二.怎样利用缓存保证数据的一致性前言:今天单就MySQL主从及原理和遇到问题分析下,当然要支撑高并发仅仅靠MySQL是不可行的,目前我司用的是 MySQL+Nginx+redis+rabitMQ+elasticsearch+mongoDB等来支撑高并发;根据业务场景组合拳吧,下面进入正题.....如果想从MySQL方便做到支持一定量的并发,那么必然会想到:读写分离MySQL 做读写分离的前提,是把 MySQL 集群拆分成“主 + 从”结构的数据集群,这样才能实现程序上的
2021-08-25 14:46:20
3294
原创 PHP switch-case与if-else两个效率对比
如果纯粹比较数字或字符,建议使用switch,因为它只会在一开始的switch括号中取出变量值一次,然后将这个值与下面所设定的case比较,但如果使用if,每次遇到条件式时,都要取出变量值,前者效率更好一些$jiejie=3; // 变判断的值为常量switch($jiejie){ case 1: echo '常量值为1'; break; // 跳出循环 case 2: echo '常量值为2'; break; // 跳出循环 case 3:
2021-07-28 20:06:27
375
原创 MySQL 索引的区分度之性能分析
对于选择性不高的列甚至可以不创建索引。如果选择性不高,极端性情况下可能会扫描全部或者大多数索引,然后再回表,这个过程可能不如直接走主键索引性能高。索引列的选择往往需要根据具体的业务场景来选择;但是需要注意的是索引的区分度越高则价值就越高,意味着对于检索的性价比就高。索引的区分度等于count(distinct 具体的列) / count(*),表示字段不重复的比例。唯一键的区分度是1,而对于一些状态值,性别等字段区分度往往比较低,在数据量比较大的情况下,甚至有无限接近0。...
2021-07-23 14:29:23
6549
原创 MySQL varchar长度分配对性能的影响
前言:解决问题的方法没有最优,只有更优!最近在XXX处看到建表时,看到对varchar长度设计并没有理解很透彻,故总结下。举例: varchar(32) 和 varchar(64)区别是啥?首先,varchar 大家都知道是动态长度分配,他们空间开销是一样的。区别和联系:对于内存的消耗是不同的。对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,也就是上面所说空间开销一样。但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。就是使用字符类型中定义的长
2021-06-21 18:42:34
5259
原创 订单未付款30分钟自动取消设计方案
背景:我们在做订单流程开发时,几乎都会碰到下单后订单未付款,自动取消订单,库存恢复的场景,比如淘宝下单、美团下单等等;针对这种场景我们要考虑两个特性,1并发 2实时,下面有两种设计方案可实现一.利用中间件Redis,监听其过期时间来实现(订阅键空间通知)。修改redis.conf 配置。查看 notify-keyspace-events 配置项,如果没有,添加 notify-keyspace-events Ex,如果有值,则追加 Ex,相关参数说明如下:E:keyevent 事件,事件以 keye
2021-06-03 23:21:54
1306
原创 缓存数据和数据库数据一致性问题
前言:缓存机制是互联网搬砖人必须要掌握的基础知识之一,在使用Redis中间件时数据的幂等性问题是每个搬砖人应该掌握的。本篇文章围绕一致性问题逐步引入讲解下Redis的一致性问题。首先思考下为啥要使用缓存?存储如mysql通常支持完整的ACID特性,因为可靠性,持久性等因素,性能普遍不高,高并发的查询会给mysql带来压力,造成数据库系统的不稳定。同时也容易产生延迟。根据局部性原理,80%请求会落到20%的热点数据上,在读多写少场景,增加一层缓存非常有助提升系统吞吐量和健壮性。通常的开..
2021-04-07 15:25:23
213
2
原创 缓存策略之缓存雪崩、穿透、并发、击穿问题
前言:作为一名中高级开发工程师我们在工作中或面试中避不开的是关于缓存的技术知识点。闲来无事做下相关策略设计方法.....1.缓存穿透问题缓存穿透指的是每次查询个别 key 时,key 在缓存系统不命中,此时应用系统就会从数据库中查询,如果数据库中存在这条数据,则获取数据并更新缓存系统。但如果数据库中也没有这条数据,这个时候就无法更新缓存,就会造成一个问题:查询缓存中不存在的数据时,每次都要查询数据库。那么如果有人利用“查询缓存中不存在的数据时,每次都要查询数据库”恶意攻击的话,数据库会承担.
2021-04-03 22:05:32
323
2
原创 遇见MySQL 主从原理及问题的小tips
前言:今天单就MySQL方案说下架构优化,当然支撑高并发仅仅靠MySQL是不可行的,目前我司用的是 MySQL+Nginx+redis+rabitMQ+elasticsearch+mongoDB来支撑高并发;根据业务场景组合拳吧,下面进入正题........
2021-02-27 14:02:56
2448
11
原创 进程-线程-协程
一、进程?保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。二、线程?是操作系统调度(CPU调度)执行的最小单位。三、进程和线程的区别与联系【区别】: 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位; 并发性:不仅进程之间可以并发执行,同一个进程的多...
2021-02-20 16:32:20
159
原创 MySQL锁
MySQL锁总结锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是Mysql在服务器层和存储引擎层的的并发控制。加锁是消耗资源的,锁的各种操作,包括获得锁、检测锁是否是否已解除、释放锁等。锁机制共享锁与排他锁• 共享锁(读锁):其他事务可以读,但不能写。 • 排他锁(写锁) :其他事务不能读取,也不能写。粒度锁MySQL 不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现了锁机
2021-02-07 14:19:56
140
原创 MQ消息队列的丢失、重复与积压问题
一.在使用 MQ 消息队列时,如何确保消息不丢失? 首先,要分析几个点吧,比如: 如何知道有消息丢失? 哪些环节可能丢消息? 如何确保消息不丢失? 一条消息从生产到消费完成这个过程,可以划分三个阶段,分别为消息生产阶段,消息存储阶段和消息消费阶段。 消息生产阶段:从消息被生产出来,然后提交给 MQ 的过程中,只要能正常收到 MQ Broker 的 ack 确认响应,就表示发送成功,所以只要处理好返回值和异常,这个阶段是不会出现消息丢失的。 消...
2021-02-05 11:14:54
956
原创 Redis 分布式锁实现和集群的分布式设计
1.为什么选择缓存实现分布式锁?基于缓存实现的分布式锁,就是将数据仅存放在系统的内存中,不写入磁盘,从而减少 I/O 读写。避免大量请求直接访问数据库,提高系统的响应能力。2.怎么设计合理的的分布式锁?来看一个例子:(代码无绝对对错,只有适合不适合的场景)这个例子实现的分布式锁存在什么问题?1.加锁和加过期时间不是原子性操作。当出现某个线程操作完成 setnx 之后,还没有来得及设置过期时间,线程就挂掉了,此例会先判断key是否存在,存在的话给了一个默认时间。当并发量大时,会处于等待操作,并不适
2021-02-04 17:49:25
244
原创 redis数据结构
文章目录redis有几种数据结构?redis有几种数据结构?五种基础数据结构先就不多说了,string,list,hash, set, zset 。两种特殊数据结构:位图,HyperLogLog。实现原理及应用场景:[string] 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。value其实不仅是String,也可以是数字。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如
2020-11-26 01:42:28
210
1
原创 MySQL事务隔离级别理解
文章目录概念说明事务隔离级别:概念说明1. 脏读:指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读。2. 幻读:是针对数据插入(INSERT)操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,
2020-11-22 20:22:16
169
1
转载 理解sql查询执行先后顺序
假设所有条件都存在,那么我们来看下执行先后顺序FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1ON: 对虚表VT1进行ON筛选,记录在虚表VT2中。JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就...
2018-09-30 14:05:37
789
Go语言圣经
2019-04-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人