索引:排好序的快速查找的数据结构

MySQL是插件式存储引擎,基于表的RDB,不同的表可以选择不同存储引擎

存储引擎 myisam innodb NDB, memory

阿里自己开发的alisql

myisam 不支持事务,支持表锁支持全文索引,查找效率非常高

innoDB 支持事务,行锁

电商项目 :订单表,商品表 基于业务

订单表:必须支持事务(交易)插入多 查询少 InnoDB
商品表:有后台人员录入,查询多插入少 myIsam


Btree索引 B-tree(多路搜索树,并不是二叉的,也不是平衡二叉树)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高

hash索引(局限性太多,基本不使用)

全文索引

Myisam balancetree 平衡二叉树 在系统文件存储 地址指针

在硬盘上有三部分组成
.myi 索引
.myd 数据
.frm 表结构
InnoDB 在硬盘上
.frm 表结构
.idb 索引和数据
(查找数据很大的话,要放在缓存中,会占用很多系统资源)

Myisam 非聚集索引(数据和索引分离)
InnoDB 聚集索引 (数据和索引分析)

MySQL索引-总结

如果这树有32层 ,这个表将有40亿的数据,没有索引的话查找,要很长时间
有索引的话就会32次就知道了logn

MySQL索引-总结

MySQL索引-总结

复合联合索引(多列索引)
复合索引(将多个列合起来做一个索引)复合索引,跟查询字段的顺序有关。where name = g and age = 20;查询高的放前面。

系统资源:IO, 磁盘, 缓存 ,CPU
索引提高检索的速度(降低IO读取)检索会消耗CPU

缺点:
占用存储空间
更新

若500w数据单表的查询的时候出现查询瓶颈考虑建立索引

不适合建立索引
1 更新频繁的字段不适合建立索引
2 where没有使用的字段
3 表的数据很少
4 数据重复(男女)并且分布比较均衡的字段
5 参与列计算的时候不适合建立索引

建立索引 sql解析(explain 执行计划) 缓存 增加机器 拆分(分库,分表(垂直,水平))

scale out 水平扩展 增加机器 集群负载 读写分离
scaleup 垂直扩展 提高计算机性能 增加CPU SSD

牛文:http://blog.jobbole.com/24006/

参考: http://blog.csdn.net/u014307117/article/details/47325091

相关文章: