目录
联合索引 abc where a=3 and b>3 and c=3 怎么走索引?
MYSQL innodb引擎的索引结构,B+树一般都多高,层高怎么计算的?
读写分离和分库分表详解 | JavaGuide
数据冷热分离详解 | JavaGuide
深度分页介绍及优化建议 | JavaGuide
索引
查询性能优化
存储引擎
数据类型
切分
复制
分类 | 详情 |
---|---|
索引 | B+Tree 原理:基于 B Tree 和叶子节点顺序访问指针实现,节点 key 有序,查找时在根节点二分查找后递归,插入删除后需维护平衡性。相比红黑树,B+Tree 树高更低,更适合磁盘数据读取,且利用磁盘预读特性提升性能 MySQL 索引类型: - B+Tree 索引:多数存储引擎默认类型,查找快,可用于排序、分组,支持多种查找方式,InnoDB 有主索引(聚簇索引)和辅助索引之分 - 哈希索引:查找时间复杂度 O (1),但无法排序、分组,只支持精确查找,InnoDB 有自适应哈希索引 - 全文索引:MyISAM 和 InnoDB 5.6.4 + 版本支持,用于查找文本关键词,使用倒排索引,查询用 MATCH AGAINST - 空间数据索引:MyISAM 支持,用于地理数据存储,从多维度索引数据,需 GIS 函数维护数据 索引优化: - 独立的列:索引列不能是表达式或函数参数 - 多列索引:多条件查询时多列索引性能优于多个单列索引 - 索引列顺序:将选择性强的列放前面,选择性是不重复索引值与记录总数比值 - 前缀索引:BLOB 等类型列使用前缀索引,前缀长度依选择性确定 - 覆盖索引:索引包含查询所需所有字段值,能减少数据访问量等 索引优缺点及适用场景:优点是减少扫描行数、避免排序分组和临时表创建、将随机 I/O 变顺序 I/O;小表全表扫描可能更高效,中大型表索引有效,特大型表需考虑分区技术 |
查询性能优化 | Explain 分析:用于分析 SELECT 查询语句,通过 select_type、key、rows 等字段优化查询 优化数据访问: - 减少请求数据量:不使用 SELECT *,用 LIMIT 限制返回行数,缓存重复查询数据 - 减少服务器扫描行数:使用覆盖索引 重构查询方式: - 切分大查询:防止锁数据、占满事务日志等,如按批次删除大量数据 - 分解大连接查询:提高缓存效率、减少锁竞争等,如用 IN () 代替连接查询 |
存储引擎 | InnoDB:默认事务型存储引擎,支持四个隔离级别,默认可重复读,用 MVCC + Next-Key Locking 防幻影读,主索引是聚簇索引,内部有多种优化,支持在线热备份 MyISAM:设计简单,适用于只读或小表场景,提供压缩表等特性,不支持事务和行级锁,有并发插入功能,索引数据写入可延迟 对比:InnoDB 支持事务、行级锁和外键,崩溃后损坏概率低;MyISAM 支持压缩表和空间数据索引,只支持表级锁 |
数据类型 | 整型:TINYINT 等多种类型,INT 括号内数字不影响存储计算 浮点数:FLOAT、D |