1、什么是索引

索引是对数据库表中一列或者多列的值进行排序的一种结构。索引是在存储引擎中实现的,每种存储引擎中的索引不一定完全相同。

MySQL中索引的存储类型有两种:btree和hash。MyISAM和InnoDB存储引擎只支持btree索引;MEMORY / HEAP存储引擎可以支持hash和btree索引。

2、索引的分类

1》普通索引和唯一索引:

2》单列索引和组合索引:

3》全文索引:fulltext,可以在char、varchar、text类型的列上创建全文索引。MySQL只有MyISAM存储引擎支持全文索引。

4》空间索引:spatial,MySQL中的空间数据类型有4种,分别是geometry、point、linesstring、polygon。创建空间索引的列必须将其声明为not null。并且只有MyISAM存储引擎支持这种索引的创建。

3、索引的设计原则

1》索引并非越多越好,动态索引维护需要花销

2》避免对经常更新的表建立过多的索引

3》数据量小的表最好不要建立索引

4》在不同值较多的字段上建索引

5》对唯一性字段建索引

6》在频繁进行排序或分组的列上建立索引

4、MySQL建立索引

查询数据库所有的索引:

查看某一表的索引:

show index from tb_name \G;

1》在创建表的时候创建索引

primary key、foreign key、unique创建的时候相当于同时给指定列创建了一个索引。

//创建表时创建索引的基本语法格式。
//unique为唯一索引、fulltext为全文索引、spatial为空间索引
//index和key为同一词
//length表示索引长度,只有字符串类型的字段可以指定索引长度
//asc或者desc指定索引按照升序或者降序的索引值存储
create table tb_name [col_name data_type] [unique|fulltext|spatial]
[index|key] (col_name [length]) [asc|desc]

1>创建普通索引

create table book(

  bookid int not null,
...
index(bookid)
);

使用explain语句查看索引是否正在使用:

mysql> explain select * from test where id=1 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
partitions: NULL
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
filtered: 100.00
Extra: NULL
1 row in set, 1 warning (0.00 sec) mysql>

select_type:指定所使用的select查询类型,simple表示简单的select,不使用union或子查询。其他可能的取值有:primary、union、subquery。

table:指定数据库读取的数据表的名字。

type:指定了本数据表与其他数据表之间的关联关系,可能的取值有system、const、eq_ref、ref、range、index、all。

possible_keys:给出了MySQL在搜索数据记录时可选用的各个索引。

key:MySQL实际选用的索引。

key_len:给出索引按字节计算的长度,key_len数值越小,表示越快。

ref:给出了关联关系中另一个数据表里的数据列的名字。

rows:MySQL执行这个查询时预计会从这个数据表读出的数据行的个数。

extra:提供了与关联操作有关的信息。

2>创建唯一索引

//创建一个名为uniqueIdx的唯一索引
create table book( id int not null,
...
unique index uniqueIdx(id)
);

3>创建单列索引

//创建索引长度为20的索引
create table book( id int not null,
...
name char(50) null,
index singleIdx(name(20))
);

4>创建组合索引

//创建组合索引:组合索引遵循最左前缀原则,即(id,name)或者(id),不遵循最左前缀原则,将不能使用局部索引。
create table book( id int not null,
...
name char(50) null,
index multiIdx(id,name(20))
);

 5>创建全文索引

//只有MyISAM存储引擎支持全文索引(全文搜索)
//并且只为char、varchar、text列创建全文索引,索引总是对整个列进行,
//不支持局部(前缀)索引
create table book( id int not null,
...
info varchar(255),
fulltext index fulltextIdx(info)
) engine=MyISAM;

6>创建空间索引

//创建空间索引。
//相应字段要非空,engine=MyISAM
create table book( id int not null,
...
intime geometry not null,
spatial index spatialIdx(intime)
)engine=MyISAM;

2》在已经存在的表上创建索引

可以使用alter table 或者 create index语句。

1>使用alter table的基本语法

alter table tb_name add [unique|fulltext|spatial] [index|key]
[index_name] (col_name[length],...) [asc|desc]

2>使用create index的基本语法

create [unique|fulltext|spatial] index [index_name]
on tb_name (col_name[length],...) [asc|desc]

5、删除索引:alter table 或者 drop index

1》使用alter table删除索引

alter table tb_name drop index index_name;

添加auto_increment约束字段的唯一索引不能被删除。

 2》使用drop index删除索引

drop index index_name on tb_name;

MySQL-快速入门(7)索引的更多相关文章

  1. MySql基础笔记(一)Mysql快速入门

    Mysql快速入门 一)基本概念 1)表 行被称为记录,是组织数据的单位.列被称为字段,每一列表示记录的一个属性. 2)主键 主键用于唯一的标识表中的每一条记录.可以定义表中的一列或者多列为主键, 但 ...

  2. MySQL 快速入门教程

    转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...

  3. MySQL 快速入门(一)

    目录 MySQL快速入门 简介 存储数据的演变过程 数据库分类 概念介绍 MySQL安装 MySQL命令初始 环境变量配置 MySQL环境变量配置 修改配置文件 设置新密码 忘记密码的情况 基本sql ...

  4. MySQL快速入门(二)

    目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...

  5. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  6. SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...

  7. Mysql快速入门(看完这篇能够满足80%的日常开发)

    这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...

  8. Mysql快速入门(三)

    MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...

  9. 几百万的数据,mysql快速高效创建索引

    有一个问题,一张表有3百万条记录,随着时间的增加,记录量会更多,此时查询速度很慢.在创建此表前没有未相应字段添加索引,所以此时需要为表添加索引.但是因为数据量大的原因,索引添加不成功,想了很多办法,终 ...

  10. MySQL快速入门 基本技能篇

    写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景,文中出现的局限性欢迎指出 MySQL有客户端式(SQLyog),可托拉拽和写代码:或者 ...

随机推荐

  1. Hive 窗口函数LEAD LAG FIRST_VALUE LAST_VALUE

    窗口函数(window functions)对多行进行操作,并为查询中的每一行返回一个值. OVER()子句能将窗口函数与其他分析函数(analytical functions)和报告函数(repor ...

  2. python的xlrd、xlwt模块、openpyxl /pymsql使用

    xlrd模块: https://www.cnblogs.com/machangwei-8/p/10736528.html#_label0 xlwt模块 https://www.cnblogs.com/ ...

  3. Docker(1)--概述

    Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...

  4. 移动端ios和安卓input问题

    在钉钉开发微应用的时候. 安卓和苹果输入input框的时候.失去焦点和获取焦点会有明显的上下跳动 因此我用绝对定位把位置固定在一个地方.就不会有跳动

  5. 【ZJOJ1321】灯

    题目 贝希和她的闺密们在她们的牛棚中玩游戏.但是天不从人愿,突然,牛棚的电源跳闸了,所有的灯都被关闭了.贝希是一个很胆小的女生,在伸手不见拇指的无尽的黑暗中,她感到惊恐,痛苦与绝望.她希望您能够帮帮她 ...

  6. [Noip模拟题]宠物之战senso

    Description 众所周知,moreD的宠物已经被moreD奴役得体无完肤.这只宠物实在忍无可忍,把自己每天走魔法树的经历告诉了 自己的宠物.同时他还说明了自己爬树是多么地慢,以至于moreD每 ...

  7. event.stopPropagation()和event.preventDefault(),return false的区别

    我写公司的官网遇到一个问题,轮播图的上一层有一块内容,用鼠标拖动那块内容的时候下一层的轮播图也会跟着拖动,而上面的那层的内容是不会动的,我想这就是冒泡事件在作祟了吧 跟冒泡事件相关的,我想到三个: 1 ...

  8. 当SQL Server出现当 MUST_CHANGE 为 ON (开)时

    取消账号强制策略时出现错误 当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关). (Microsoft S ...

  9. 激活navicat premium12

    按Win键和R键打开运行并输入cmd并回车或Win10 开始菜单右键,打开命令提示符或者命令提示符(管理员) ,建议使用命令提示符(管理员) 最为稳妥. 1.首先使用cd命令切换到当前Navicat ...

  10. the path component: '/var' is world-writable

    java.io.IOException: the path component: '/var' is world-writable.  Its permissions are 0666.  Pleas ...