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),可托拉拽和写代码:或者 ...
随机推荐
- 【NOIP2016提高A组模拟9.17】数格子
题目 分析 设表示每一行的状态,用一个4位的二进制来表示,当前这一行中的每一个位数对下一位有没有影响. 设\(f_{i,s}\)表示,做完了的i行,其状态为s,的方案数. 两个状态之间是否可以转移就留 ...
- 【leetcode】Largest Plus Sign
题目如下: In a 2D grid from (0, 0) to (N-1, N-1), every cell contains a 1, except those cells in the giv ...
- Apache Flink CEP 实战
本文根据Apache Flink 实战&进阶篇系列直播课程整理而成,由哈啰出行大数据实时平台资深开发刘博分享.通过一些简单的实际例子,从概念原理,到如何使用,再到功能的扩展,希望能够给打算使用 ...
- 在vue中结合render函数渲染指定的组件到容器中
1.demo 项目结构: index.html <!DOCTYPE html> <html> <head> <title>标题</title> ...
- jquery扩展方法(表单数据格式化为json对象)
1.jquery扩展方法(表单数据格式化为json对象) <script type="text/javascript"> // 将表单数据序列化为一个json对象,例如 ...
- UINX标准C - 进程管理
进程与程序的关系: 1.程序就是存储在磁盘上可执行的二进制文件, 2.进程是一个正在执行的的程序,不过一个程序可能存在多个进程实例. 查看进程中的pid和获取pid(进程号) 1.终端指令:ps a ...
- [算法]概率与期望DP
前言 前两节主要针对题目分析,没时间的珂以跳过. 初步 首先举一道简单.经典的好题: [Lightoj1038]Race to 1 Again 懒得单独写,安利一下DennyQi同学的博客:https ...
- linux文件夹目录含义及用途
/boot,存放linux启动文件和内核: /initrd,boot loader initialized RAM disk,就是由boot loader初始化的内存盘.在linux内核启动前,boo ...
- 3D Computer Grapihcs Using OpenGL - 18 相机移动
移动相机需要用到键盘按键,按键事件的引入需要包含头文件 #include <Qt3DInput\qkeyevent.h> 并实现QWidget中定义的虚函数keyPressEvent 我们 ...
- 使用node.js搭建本地服务器
第一步安装node:https://nodejs.org/zh-cn/download/ 接下来就需要安装http的镜像文件 打开cmd:输入以下命令 npm install http-server ...