[汇总]MySQL优化经验和理论
为什么 MySQL 索引要使用 B+树而不是其它树形结构?比如 B 树?
那么可以算出一棵高度为2的B+树,能存放1170*16=18720条这样的数据记录。根据同样的原理我们可以算出一个高度为3的B+树可以存放:1170*1170*16=21902400条这样的记录。
两类非常隐蔽的全表扫描,不能命中索引
第一类:“列类型”与“where值类型”不符,不能命中索引,会导致全表扫描(full table scan)。
第二类:相join的两个表的字符编码不同,不能命中索引,会导致笛卡尔积的循环计算(nested loop)。
explain结果中的type字段,ref,ALL等不一样的值究竟是什么含义?常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要。
记一次神奇的 sql 查询经历,group by 慢查询优化!
- COUNT有几种用法?
- COUNT(字段名)和COUNT(*)的查询结果有什么不同?
- COUNT(1)和COUNT(*)之间有什么不同?
- COUNT(1)和COUNT(*)之间的效率哪个更高?
- 为什么《阿里巴巴Java开发手册》建议使用COUNT(*)
- MySQL的MyISAM引擎对COUNT(*)做了哪些优化?
- MySQL的InnoDB引擎对COUNT(*)做了哪些优化?
- 上面提到的MySQL对COUNT(*)做的优化,有一个关键的前提是什么?
- SELECT COUNT(*) 的时候,加不加where条件有差别吗?
- COUNT(*)、COUNT(1)和COUNT(字段名)的执行过程是怎样的?
阿里不让多表join?我偏要!
就是快速造数据。你可以自己先写脚本造数据,看看我是怎么造数据的,就知道我的技巧了。
一款SQL自动检查神器,再也不用担心SQL出错了,自动补全、回滚等功能大全
Yearning MYSQL
频繁插入(insert)的业务,用什么存储引擎更合适?
虽然MyISAM只支持表锁,但高并发select与insert的业务场景,上述机制使得MyISAM的表锁依然有非常强劲的性能。
源表中有100万条数据,其中有50万created_time和item_name重复。要把去重后的50万数据写入到目标表。