zoukankan      html  css  js  c++  java
  • 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索引。

  • 相关阅读:
    POJ1486 Sorting Slides 二分图or贪心
    POJ2060 Taxi Cab Scheme 最小路径覆盖
    POJ3083 Children of the Candy Corn 解题报告
    以前的文章
    POJ2449 Remmarguts' Date K短路经典题
    这一年的acm路
    POJ3014 Asteroids 最小点覆盖
    POJ2594 Treasure Exploration 最小路径覆盖
    POJ3009 Curling 2.0 解题报告
    POJ2226 Muddy Fields 最小点集覆盖
  • 原文地址:https://www.cnblogs.com/BradMiller/p/9777143.html
Copyright © 2011-2022 走看看