看看MySQL 官方文档 Extending VARCHAR column size The number of length bytes(字节) required by a VARCHAR column...如果修改字段的长度,导致字段的字节长度无法使用 1 byte表示,得使用2个byte才能表示,比如从 240 修改为 256 ,如果在默认字符集为utf8mb4的情况下,varchar(60) 修改为...varchar(64),则DDL需要以copy模式,也即会锁表,阻塞写操作。...关于MySQL online ddl 奉献一份 收藏多年的流程图, 以xmind 文件方式分享到百度云盘上,方便给位查看,可以直接访问原文直达百度云盘。 ?
哪些情况下索引会被忽略 前导LIKE 语句 前导模糊查询不生效 (如 like '%XX'或者like '%XX%') //生效 explain select * from cartoon where...不能在索引上做任何操作(计算、函数、自动/手动类型转换) MYSQL索引类型 索引类型 1. 普通索引 (index) 2....唯一索引 (unique) 在普通索引的基础上,会进行排除重复值 3. 主键索引 (primary key) 和唯一索引的区别在于一个表里只能有一个主键索引,但是唯一索引可以有多个。 4....为什么不默认采用HASH索引呢? HASH只能用在=和上,所以功能受限,所以默认采用BTREE。
使用“EXPLAIN sql语句”进行调试,查看possible_keys或key possible_keys:可能应用的索引 key:实际使用的索引 哪些情况下索引会被忽略 前导LIKE 语句...between“ 范围条件,可使用 where xx> 1 and xx<3代替 IS NULL 或 IS NOT NULL,判断为空 不能在索引上做任何操作(计算、函数、自动/手动类型转换) MYSQL...唯一索引 (unique) 在普通索引的基础上,会进行排除重复值 3. 主键索引 (primary key) 和唯一索引的区别在于一个表里只能有一个主键索引,但是唯一索引可以有多个。...为什么不默认采用HASH索引呢? HASH只能用在=和上,所以功能受限,所以默认采用BTREE。
mysql sql 中如果使用了 not in , not exists , ( 不等于 !...3.对索引应用内部函数,这种情况下应该建立基于函数的索引。...from template t where t.template_id = 1 正确写法:select * from template t where t.template_id = ‘1’ 5.如果MySQL...预计使用全表扫描要比使用索引快,则不使用索引 6.like的模糊查询以%开头,索引失效 7.索引列没有限制 not null,索引不存储空值,如果不限制索引列是 not null,oracle会认为索引列有可能存在空值
老王:最近我的MySQL数据库很慢.... 很忧伤,这可肿么办? 帅萌:老王,老王你莫心慌,听我跟你唠~ MySQL性能有问题,先应该关注的是慢查询日志(slow log)。...sy%系统内核使用的CPU占比,如果sy%太高,要注意MySQL的连接数和锁等信息。...至于为什么,建议阅读《NUMA架构的CPU -- 你真的用好了么?》 。 阅读地址:http://t.cn/RAZ3hw9 内存泄漏观察方法 buff/cache 和used 对比。...如果发生了内存泄漏,解决方案: 重启MySQL 。 升级到最新的小版本MySQL 。 还可以通过vmstat 来观察每秒的进程、内存、swap、io、cpu等详情情况。 ?...如果实在看不懂的请联知数堂zizi老师,我负责挖坑,他负责教你会,带你飞。
阻塞发生的情况遇到script标签加载js的时候会加载js并且执行完毕才开始渲染遇到alert会阻塞css加载不会阻塞DOM树的解析,但css加载会阻塞DOM树(render树)的渲染同时css加载 也会阻塞后面...js语句的执行总结就是 解析遇到link、script、img标签时,浏览器会向服务器发送请求资源。
使用explain: 有content时结果: mysql> explain select id, name, last_update_time from t order by last_update_time...15544 | Using filesort | +—-+————-+—————-+——+—————+——+———+——+——-+—————-+ 1 row in set (0.00 sec) 请大神请教,是什么问题
就跟卡bug一样,比如说你去面试,面试官问你:MySQL为什么会死锁;你告诉面试官:你录用我我就告诉你,面试官说:你告诉我我就录用你,然后你两就一直这么你问我我问你,这就是死锁。...那么,什么时候会发生死锁呢?...: 3️⃣ 死锁的底层原理分析 其实有了昨天的知识储备,了解了查询的时候的加锁情况,我们其实不难分析出为什么会死锁: select * from team where position_no = 6 for...(6,+∞]的临键锁,而接下来的插入操作会去获取插入意向锁,插入意向锁与临键锁互斥,因此获取插入意向锁需要对方的事务的临键锁释放,于是就出现了循环等待,也就是死锁 4️⃣ 如何避免死锁 在数据库层面,MySQL...的死锁情况,关于为什么会死锁,讲完昨天的文章,也就是对查询时的加锁情况的讲解,其实来分析这个死锁的情况并不是一件难事,最后也介绍了从数据库层面和业务层面如何去防止MySQL出现死锁的情况。
ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 2.插入10万条数据 快速生产10万数据方法,执行main方法后,会将sql文件存入E盘,放到MySQL...--+---------+------+-------+----------+-------------+ 1 row in set (0.02 sec) 4.结果分析 查询条件是a、b、c时,无论是什么顺序...,由于优化器优化,都会走INDEX_A_B_C联合索引; 查询条件是a、b时,会走联合索引; 查询条件是a、c时,也会走联合索引,但是Extra信息里面多了一行:Using index condition...查询条件是b、c时,不走联合索引; 查询条件是a时,会走联合索引; 查询条件是b时,不走联合索引; 查询条件是c时,不走联合索引; 5.总结 联合索引符合最左匹配原则,按照索引建的顺序,一个查询可以只使用索引中的一部份...也会走联合索引,但是只有a条件命中,c条件不走联合索引。 还有,需要避免索引失效的情况,如:LIKE %xxx,或者条件中使用函数等。
死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也...
4、默认情况下此注解会对unchecked异常进行回滚,对checked异常不回滚。 那什么是unchecked,什么是checked呢?...启动事务会增加线程开销,数据库因共享读取而锁定(具体跟数据库类型和事务隔离级别有关)。通常情况下,仅是读取数据时,不必设置只读事务而增加额外的系统开销。...如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。...如果方法没有关联事务,则不会为其开启一个事务 如果方法别关联了事务的方法调用,则该事务将会被挂起,调用完成之后,原来的事务会恢复执行。
在 mysql 上执行了一句 drop database 半天没有完成,详细的慢查询日志如下,那当时MySQL 在做什么呢?...在做什么的场景,最为直接就是执行 show processlist 命令,但是这个场景下只能看到语句在执行,至于执行到哪个函数了,这种更加细粒度的就回答不了了。...如果我们从 linux 内核层面看,还是可以发现 mysql 这个时候在执行哪些函数的;从而达到更加细粒度的确认 MySQL 在做什么,进而回答 drop database 为什么慢。...可以看到在删库时调用的是 mysql_rm_db 这个函数,而这个函数又调用了 mysql_rm_table_no_locks 函数,mysql_rm_table_no_locks 会去清理数据字典。...那删库为什么会慢呢?回答这个问题还需要更加深入地分析才行。 ---- OFF-CPU 如果一个进程所依赖的所有资源都已经准备好,那它就可以被调度到 cpu 上执行。
字符和字符集的关系 mysql的字符集 想看下mysql支持哪些字符集。...这种情况下,"debug"和"Debug"是同一个单词。 对比规则-大小写不敏感 如果改成collation=utf8mb4_bin,就是指挨个比较二进制位大小。...也就是说,在这种情况下,utf8mb4会比utf8mb3多使用一些空间。 但这真的无关紧要,如果我不用char,用varchar就好了,varchar不是固定长度,也就没有上面这些麻烦事了。...mysql建表时如果不知道该选什么字符集,无脑选utf8mb4就行了,你会感谢我的。...这样的一个事故,复盘会一开,会挂P几呢?
相反,MySQL会扫描所有记录,即要查询10000条记录。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。...MySQL索引类型包括: 一、普通索引 这是最基本的索引,它没有任何限制。...name, city, age建到一个索引里: 代码如下: ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 什么情况下有索引...索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引 ?...7.如果mysql估计使用全表扫描要比使用索引快,则不使用索引 比如数据量极少的表 什么情况下不推荐使用索引?
查询流程 开始今天的内容之前,先来和小伙伴们大概捋一捋 MySQL 的查询流程。...这张图大家大概有个印象,在后续的 MySQL 查询和优化中,很多东西就容易理解了。 接下来我们就来看看什么情况下查询会变慢。 2. 查询了不需要的记录 数据按需取用。...有时候我们会忽略多拿数据对查询性能的影响,然而优化是一个锱铢必较的事情,需要多少数据就查询多少,要尽量避免数据库查询 100 条,结果前端只展示 10 条这种情况。...直接从索引中过滤出来想要的值并返回给客户端,这种时候,过滤虽然发生在 MySQL Server 层,但是由于不需要回表,效率也还过得去。...从数据表中查询到相应的记录,然后在 MySQL Server 层进行过滤,过滤的同时可能还需要回表,此时效率就会低一些。
对于MySQL的join语句,需要两个最基础的“角色”:主表即驱动表,关联表即驱动表。join描述的就是驱动表与被驱动表的关联关系。...Index Nested-Loop Join 索引嵌套循环连接,MySQL选择驱动表与被驱动表关联逻辑之一。...什么情况下MySQL会选择Index Nested-Loop Join? 当驱动表关联被驱动表的字段上具有索引时,会使用本策略。...在本策略中,驱动表在where条件筛选完毕后,会扫描全表,被驱动表走索引的树搜索。...图片引用自极客时间《MySQL实战45讲》。 能不能使用join语句?
什么情况下Java程序会产生死锁?如何定位、修复?
为什么会出现上面的结果?我们看一下select * from test where val=4 limit 300000,5;的查询过程: 查询到索引叶子节点数据。...肯定会有人问:既然一开始是利用索引的,为什么不先沿着索引叶子节点查询到最后需要的5个节点,然后再去聚簇索引中查询实际数据。这样只需要5次随机I/O,类似于下面图片的过程: 其实我也想问这个问题。...也证实了为什么第一个sql会慢:读取大量的无用数据行(300000),最后却抛弃掉。...而且这会造成一个问题:加载了很多热点不是很高的数据页到buffer pool,会造成buffer pool的污染,占用buffer pool的空间。...,地球人类社会底层运行原理 不是你需要中台,而是一名合格的架构师(附各大厂中台建设PPT) 企业IT技术架构规划方案 论数字化转型——转什么,如何转?
一,前言 首先说明一下MySQL的版本: mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.17...为什么会出现上面的结果?我们看一下select * from test where val=4 limit 300000,5;的查询过程: 查询到索引叶子节点数据。...肯定会有人问:既然一开始是利用索引的,为什么不先沿着索引叶子节点查询到最后需要的5个节点,然后再去聚簇索引中查询实际数据。这样只需要5次随机I/O,类似于下面图片的过程: 其实我也想问这个问题。...也证实了为什么第一个sql会慢:读取大量的无用数据行(300000),最后却抛弃掉。...而且这会造成一个问题:加载了很多热点不是很高的数据页到buffer pool,会造成buffer pool的污染,占用buffer pool的空间。
1、如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少使用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2、对于多列索引,不是使用的第一部分,则不会使用索引...3、like查询的是以%开头 4、如果列类型是字符串,那一定要在条件中将数据使用引号引起来,否则不会走索引 5、如果MySQL内部优化器优化后估计使用全表扫描比使用索引块,则不使用索引 查看索引使用的情况
领取专属 10元无门槛券
手把手带您无忧上云