MySQL-快速入门(7)索引
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)索引的更多相关文章
- MySql基础笔记(一)Mysql快速入门
Mysql快速入门 一)基本概念 1)表 行被称为记录,是组织数据的单位.列被称为字段,每一列表示记录的一个属性. 2)主键 主键用于唯一的标识表中的每一条记录.可以定义表中的一列或者多列为主键, 但 ...
- MySQL 快速入门教程
转:MySQL快速 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据 ...
- MySQL 快速入门(一)
目录 MySQL快速入门 简介 存储数据的演变过程 数据库分类 概念介绍 MySQL安装 MySQL命令初始 环境变量配置 MySQL环境变量配置 修改配置文件 设置新密码 忘记密码的情况 基本sql ...
- MySQL快速入门(二)
目录 MySQL快速入门(二) 约束条件 自增 自增的特性 主键 外键 级联更新/删除 表与表之间的关系 外键约束 操作表方法 查询关键字 练习数据 select··from where 筛选 gro ...
- elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- Mysql快速入门(看完这篇能够满足80%的日常开发)
这是一篇mysql的学习笔记,整理结合了网上搜索的教程以及自己看的视频教程,看完这篇能够满足80%的日常开发了. 菜鸟教程:https://www.runoob.com/mysql/mysql-tut ...
- Mysql快速入门(三)
MySQL性能优化之查看执行计划explain 介绍: (1).MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发 ...
- 几百万的数据,mysql快速高效创建索引
有一个问题,一张表有3百万条记录,随着时间的增加,记录量会更多,此时查询速度很慢.在创建此表前没有未相应字段添加索引,所以此时需要为表添加索引.但是因为数据量大的原因,索引添加不成功,想了很多办法,终 ...
- MySQL快速入门 基本技能篇
写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景,文中出现的局限性欢迎指出 MySQL有客户端式(SQLyog),可托拉拽和写代码:或者 ...
随机推荐
- 【leetcode】1222. Queens That Can Attack the King
题目如下: On an 8x8 chessboard, there can be multiple Black Queens and one White King. Given an array of ...
- 【leetcode】Network Delay Time
题目: There are N network nodes, labelled 1 to N. Given times, a list of travel times as directed edge ...
- 常用深度学习框架(keras,pytorch.cntk,theano)conda 安装--未整理
版本查询 cpu tensorflow conda env list source activate tensorflow python import tensorflow as tf 和 tf.__ ...
- XML to HTML
本章讲解如何把 XML 数据显示为 HTML. 在 HTML 中显示 XML 数据 在上一节中,我们讲解了如何通过 JavaScript 来解析 XML 并访问 DOM. 本例遍历一个 XML 文件 ...
- ASP.NET实现文件断点续传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- 通过ecplise导入mysql的jar包时,右键找不到build path问题
当我们执行java连接数据库程序的时候,我们需要再我们的项目里导入mysql的jar包,这时,我们需要右键->build path进行导入,但是有时候我们右键的时候并没有出现build path ...
- (转)IIS Express介绍与使用
IIS Express是什么?IIS Express是为开发人员优化的轻量级.自包含版本的IIS.IIS Express使使用当前最新版本的IIS来开发和测试网站变得容易.它具有IIS 7及以上的所有 ...
- hadoop stop-dfs.sh 无法停止 namenode datanode
原因: HADOOP_PID_DIR 默认为 /tmp 目录,如果长期不访问/tmp/目录下的文件,文件会被自动清理,因此 stop-dfs.sh 无法根据 pid 停止 namenode, data ...
- c++ 指针类型转换
1.数据类型转换(static_cast) //数据类型转换printf("%d\n", static_cast<int>(10.2)); 2.指针类型转换(reint ...
- 为什么在vmware中不能使用ctrl+alt+F1~6切换到字符控制台
为什么在vmware中不能使用ctrl+alt+F1~6切换到字符控制台 是因为vmware虚拟机的快捷键: ctrl+alt也用到了 因为vmware本身的hot keys也用到了ctrl+alt: ...