索引的设计和使用

1 索引概述

  MySIAM和InnoDB存储引擎的表默认创建的都是BTREE索引,MySQL目前不支持函数索引,但是支持前缀索引。还支持全文本索引,但是只有MySIAM(5.0开始)支持FULLTEXT索引,并只限于CHAR、VARCHAR和TEXT列

  CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name

  [USING index_type]

  ON tbl_name (index_col_name,...)

  index_col_name:col_name [(length)] [ASC|DESC]

  删除索引

  drop index index_name ON tbl_name

2. 设计索引的原则

  1).搜索的索引项,不一定是所要选择的列,换句话说,最适合索引的列是出现在where子句中的列,或者是连接子句中指定的列。

  2).使用唯一索引,考虑某列中的值的分布。索引的列的基数越大,索引的效果越好。

  3).使用短索引。如果对字符串进行索引,应该指定一个前缀长度,只要有可能就应该这样做。(较小的索引涉及的磁盘IO较少,更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值)

  4).利用最左前缀。在创建一个n列的索引时,实际创建了MySQL可利用的n个索引。多列索引可起几个索引的作用,因为可利用索引最左边的列集来匹配行。

  5).不要过度索引。不要以为索引越多越好,每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。在修改表的内容时,索引必须更新,有时可能需要重构,因此索引越多话费的时间越长。如果一个索引很少利用或从不使用,那么会不必要的减缓表的修改速度。此外,MySQL在生成一个执行计划时,要考虑各个索引,这也需要花费时间。

  6).对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存。如果有明确定义的主键,则按照主键的顺序保存。如果没有主键,但是有唯一索引,那么就会按照唯一索引的顺序保存,按照主键或者内部列进行访问时最快的,所以InnoDB表尽量自己指定主键。还需要注意,InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有地减少索引的磁盘占用,提高索引的缓存效果。

3.BTREE索引与HASH索引

MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引各有其不同的适应范围。HASH索引有哪些重要的特征需要在使用的时候特别注意:

  1)、只用于使用=或<=>操作符的等是比较

  2)、优化器不能使用HASH索引来加速ORDER BY操作

  3)、MySQL不能确定在两个值之间大约有多少行,将一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询效率。

  4)、只能使用整个关键字来搜索一行

mysql__索引的设计和使用的更多相关文章

  1. MySQL索引的设计和使用

    一.索引可以有效地提升SELECT操作的性能,同时会影响UPDATE.CREATE和DELETE操作的性能.每种引擎对于表的索引有数量和长度的限制. 二.索引的设计原则 (A) 搜索的索引列,不一定是 ...

  2. Mysql 学习-索引的设计原则

    索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而 ...

  3. HBase二级索引的设计(案例讲解)

    摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...

  4. MySQL索引的设计、使用和优化

    原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根 ...

  5. HBase二级索引的设计

    摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...

  6. HBase之八--(1):HBase二级索引的设计(案例讲解)

    摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...

  7. MySql(二)索引的设计与使用

    MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途 ...

  8. SQL语句优化、mysql不走索引的原因、数据库索引的设计原则

    SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...

  9. HBase学习(四) 二级索引 rowkey设计

    HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...

随机推荐

  1. C++代码理解 (强制指针转换)

    #include<iostream> using namespace std; class A { public: A() { a=; b=; c=; f=; } private: int ...

  2. Waterline从概念到实操

    Waterline基本介绍 Waterline是什么 Waterline是下一代存储和检索引擎,也是Sails框架中使用的默认ORM . ORM的基本概念 Object Relational Mapp ...

  3. Python自动化运维——系统进程管理模块

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 模块:psutil psutil是一个跨平台库,可以很轻松的为我们实现获取系统运行的进程和资源利用率等信息. 功能 ...

  4. 总结Verilog中always语句的使用

    always语句包括的所有行为语句构成了一个always语句块.该always语句块从仿真0时刻开始执行其中的行为语句:最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束. ...

  5. 复制MySQL数据库A到另外一个MySQL数据库B(仅仅针对innodb数据库引擎)

    方案一:(不用太大的变化my.ini文件) copy 原数据库A中的   数据库(database)  ib_logfile1  ib_logfile0   ibdata1: 关闭目的数据库B: 备份 ...

  6. Android Google Maps 监听地图缩放

    接上篇.http://www.cnblogs.com/maomishen/p/3556297.html 由于公司项目要求,需要对google map监听地图的缩放(zoom)来进行一些操作. 但是在网 ...

  7. jmeter无法启动的解决办法

    jmeter下载地址: 链接: https://pan.baidu.com/s/15YhiPH-kNVxISEZ4Mxf_WA     提取码: 25sv jdk 8.0 下载地址: 链接: http ...

  8. MySQL☞where与like

    1.无条件查询语句(查询表中所有数据) select * from 表名 2.查询某些列的数据(指定列) select 列名1,列名2,列名3 from 表名 3.条件查询语句 select 列名1, ...

  9. xamdin: 添加小组件报错: render() got an unexpected keyword argument 'renderer'

    查找到 xadmin里面的 dashboard.py文件内render方法,增加一个rdnderer默认参数是None一般路径在 本机虚拟环境\Lib\site-packages\xadmin\vie ...

  10. 11-Mysql数据库----单表查询

    本节重点: 单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field ...