排好序的快速查找数据结构数据为什么不能进行物理删除只能进行逻
排好序的快速查找数据结构
数据为什么不能进行物理删除只能进行逻辑删除
会导致索引不准
索引优势
提高数据检索效率,降低io成本
降低数据排序成本,降低cpu消耗
索引劣势
索
什么是索引? 排好序的快速查找数据结构 数据为什么不能进行物理删除只能进行逻辑删除 会导致索引不准 索引优势 提高数据检索效率,降低io成本 降低数据排序成本,降低cpu消耗 索引劣势 索引会占空间 会降低更新表速度(insert update delete) 大数据量的表,需要花更多时间研究建立最优秀的索引优化查询 索引分类 单值索引:一个索引只包含单个列,一个表可以有多个单列索引,建议最多建立5个 唯一索引:索引列的值必须唯一,但允许有空值 复合索引: 一个索引包含多个列 基本语法 UNIQUE 唯一索引(可以有null) PRIMARY KEY 主键索引(不能为null) INDEX 普通索引 FULLTEXT 全文索引 创建 create [unique] index indexName on mytable(columnname(length)) alter mytable add [unique] index [indexName] on (columnname(length)) 删除 drop index [indexName] on mytable 查看 show index from tableName\G 索引结构 btree hash full-text r-tree b+tree 磁盘块(数据项+指针)真实数据存储在叶子节点上 非叶子节点不存储真实数据,只存储指针和数据项 哪些情况需要创建索引 主键自动建立唯一索引 频繁作为查询条件的字段应该建立索引 查询中与其他表关联的字段,外键关系建立索引 频繁更新的字段不适合建立索引(每次更新不光更新记录还要更新索引) where条件里用不到的字段不创建 单键/组合索引选择问题 (在高并发下倾向创建组合索引) 查询中排序字段(排序字段若通过索引去访问将大大提高排序速度) 查询中统计或者分组字段 哪些情况下不能建索引 表记录太少 经常增删改的表 数据重复且分布平均的表字段,因此应该只为最常查询和最经常排序的数据列建立索引,注意 如果某个数据列包含许多重复内容大数据排序,为它建立索引就没有太大的实际效果 性能分析 mysql query optimizer 瓶颈 cpu :cpu在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候 io:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候 服务器硬件性能瓶颈 top free iostat vmstat来查看系统性能 explain查询计划 作用:表读取顺序 数据读取操作类型 那些索引可以使用 那些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 包含信息 id select_type table type possible_keys key key_len ref rows extra id:数字相同的从上到下 数字不同的,数字越大优先级越高 select_type: simple (简单查询不包含子查询或union) primary(最后加载) subquery(子查询) derived(临时表) union union result(两张表的集合) type syetem>const>eq_ref>ref>range>index>all (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |