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),可托拉拽和写代码:或者 ...
随机推荐
- es6 Object.assign(target, ...sources)
Object.assign() 方法用于将所有可枚举属性(对象属性)的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...sources) ...
- C++ 遍历循环表达示 auto, auto&, auto&&
for(auto x : range) 创建拷贝,无法修改range中的元素 for(auto& x : range) 可以修改range中的元素,但一般用以下这种 for(auto& ...
- 【初中部 NOIP提高组 二试】模拟赛B总结
今天的比赛大翻车了,惨败. 第一题是一道模拟找规律题,由于一些计算错误,没有认真对拍,本来送的100分有40分飞走了~~ 第二题是在一个结论基础上的dp加单调队列,比赛上没有搞出那个结论,打了个n^3 ...
- 【leetcode】1220. Count Vowels Permutation
题目如下: Given an integer n, your task is to count how many strings of length n can be formed under the ...
- jackson 完整Jar包
Jackson fasterxml和codehaus的区别: 他们是Jackson的两大分支.也是两个版本的不同包名.Jackson从2.0开始改用新的包名fasterxml: 1.x版本的包名是co ...
- CF1263F
题目描述 给出一个类似这样 的图,求删掉最多的黑边使得每个特殊点和至少一个节点1连通 保证上下两棵树都存在一种dfs序使得访问特殊点的顺序为1~n 题解 设f[i][j]表示上面的树最后一个特殊点为i ...
- firebird默认字符在lazarus下乱码问题
firebird3数据表中,如果字段是varchar时, delphiXE的firedac在读取时正常,但lazarus中读取时会显示乱码. 经过测试发现,如果lazarus显示正常的话,必须在建表时 ...
- linux-网络管理-6
Hub 集线器 物理层设备 多端口中继器,不记忆MAC地址 以太网桥 OSI第二层数据链路层 扩展了网络带宽 分割了网络冲突域,使网络冲突被限制在最小的范围内 交换机作为更加智能的交换设备,能够提供更 ...
- entry 遍历 Map 元素
1.书写类 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class test ...
- jquery gt选择器 语法
jquery gt选择器 语法 作用::gt 选择器选取 index 值高于指定数的元素.index 值从 0 开始.经常与其他元素/选择器一起使用,来选择指定的组中特定序号之后的元素(如上面的例子) ...