• 10.Mysql索引


    10.索引的设计和使用
    10.1 索引概述
    BTREE索引:Mysql(MyIASM和Innodb)默认的索引类型。
    前缀索引:对索引字段的前N个字符创建索引。N的最大取值和存储引擎有关,MyIASM支持最大前缀长度为1000字节,Innodb引擎支持最大前缀长度为767字节。
    全文索引:可用于全文搜索。仅有MyIASM支持全文索引,且只限于CHAR、VARCHAR、Text类型的列。
    空间类型索引:仅有MyIASM支持空间类型索引,索引列必须为非空。
    HASH索引:仅有MEMORY支持HASH索引。
    创建索引语法:
    create [unique | fulltext | spatial] index index_name [using index_type] on table_name (col_name[(length)] [ASC|DESC]);
    说明:
    index_type取值为BTREE、RTRE、Hash
    例子:
    create index idx_emp_ename on emp (ename(5));
    分析查询语句,检查是否使用了索引:
    explain select * from emp where ename='SCOTT';
    删除索引语法:
    drop index index_name on table_name;
    例子:
    drop index idx_emp_ename on emp;

    10.2 设计索引的原则
    最适合索引的列是出现在where子句中的列,或连接子句中指定的列,而不是出现在select关键字后的选择列表中的列;
    考虑某列中值的分布,索引的列的基数越大,索引的效果越好;
    使用短索引,对字符串索引时应该指定一个前缀长度,即前N个字符就能大致区分唯一纪录时,避免对整列添加索引。
    复合索引,选择合适的最左前缀列;
    不要过度索引,索引会占用额外的磁盘空间,并降低DML性能。
    Innodb引擎的表记录按主键顺序保存,应该给表尽量指定主键,主键列要选择较短的数据类型,其它非主键索引会保存主键列。

    10.3 Btree索引和Hash索引
    Hash索引只能用于等值比较(=,<=>),不能用于范围比较(>,<,>=,<=,!=,<>,between...and,like),不能用于排序操作(order by),只能使用整个关键字来搜索一行。
    Btree索引可用于等值比较和范围比较(>,<,>=,<=,!=,<>,between...and,like)。
    MEMORY引擎表默认创建Hash索引,在范围比较时应创建Btree索引。

    10.4 小结
    索引用于快速找出特定的行,不是用索引时将顺序扫描所有的行;
    如果条件列有索引,将根据条件值在索引中查找记录主键,根据主键在数据中访问特定的行;
    如果需要访问表中很大一部分行(20%),顺序读取将比索引扫描更快,索引不起效。
    Mysql类型分为BTREE索引、RTREE索引、Hash索引;
    其中:主键索引、唯一键索引、全文索引、普通索引都是BTREE索引,空间索引是RTREE索引。

  • 相关阅读:
    组合模式
    HashMap,ArrayList扩容
    Maven入门使用(一)
    OutputStreamWriter API 以及源码解读
    java.io.BufferedWriter API 以及源码解读
    java.io.writer API 以及 源码解读
    自定义redis序列化工具
    策略模式
    Spring下redis的配置
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9777143.html
Copyright © 2020-2023  润新知