MySQL基础之 索引
MySQL索引讲解
索引的好处:
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
索引的缺点:
过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。
索引的设计原则
1、选择唯一性索引,也就是说多选择那些设置为主键,唯一性UNIQUE的字段来建立索引
2、为经常排序、分组的字段建立索引
3、常用作查询条件的字段建立索引,也就是常在WHERE等等子句中指定查询的列。
4、建立合适数量的索引,并不是索引越多越好
5、尽量使用数据量少的字段建立索引
6、尽量使用前缀来建立索引,比如TEXT和BLOG类型的字段,对前面的几个字符建立索引即可
7、不用的索引及时删除。
创建索引的两种方式
1、创建新表的同时创建索引。
2、如果对已存在的表创建索引,使用CREATE INDEX命令或者ALTER TABLE命令
现在来分析这两种用法
一、创建新表的同时创建索引。
CREATE TABLE TABLE_NAME(字段名 数据类型 ,
................,
[UNIQUE | FULLTEXT ] INDEX | PRIMARY KEY,
[INDEX_NAME](fileld1,field2........ [(length)] [ ASC|DESC ]);
);
UNIQUE | FULLTEXT INDEX:这两个选取其中任意一个,比如选择UNIQUE INDEX表示创建唯一索引,FULLTEXT INDEX表示创建全文索引。也可以直接就写INDEX表示创建普通索引。
PRIMARY KEY:表示创建主键索引。
INDEX_NAME:索引的名称。
filed:最后跟上field,表示对哪个字段创建的索引,还可以跟多个列表示使用多列索引。
length:索引的长度,必须是字符串类型的字段才可以使用。
二、已存在的表使用CREATE INDEX命令或者ALTER TABLE命令
创建普通索引
1、CREATE INDX
CREATE INDEX INDEX_NAME ON TABLE_NAME(’COLUMN_NAME’);
注释:COLUMN_NAME是要创建索引的列。
如果创建不止一个索引,多个COLUMN_NAME之间用逗号隔开即可。
2、ALTER TABLE 修改表结构(添加索引)
ALTER TABLE TABLE_NAME ADD INDEX INDEX_NAME(‘COLUMN_NAME’);
3、删除索引
DROP INDEX INDEXNAME ON TABLE_NAME;
ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
创建唯一索引
1、CREATE INDEX
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(’COLUMN_NAME’);
如果创建不止一个索引,多个COLUMN_NAME之间用逗号隔开。
2、ALTER TABLE修改表结构(添加索引)
ALTER TABLE TABLE_NAME ADD UNIQUE INDEX_NAME(‘COLUMN_NAME’)
3、删除索引
ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;
创建主键索引
主键只能作用在一个列上,添加主键索引时,主键默认不为空(NOT NULL)。
1、ALTER TABLE修改表结构
ALTER TABLE TABLE_NAME MODIFY TABLE_NAME DEFINATION NOT NULL;
ALTER TABLE TABLE_NAME ADD PRIMARY KEY('COLUMN_NAME');
2、删除索引
ALTER TABLE TABLE_NAME DROP PRIMARY KEY; #因为一个表中只能有一个主键,所以不需要指定索引名
总结:不能用CREATE INDEX语句创建PRIMARY KEY索引。
显示索引信息
SHOW INDEX显示信息,\G格式化输出
SHOW INDEX FROM TABLE_NAME;\G
联合索引
联合索引就是对多个字段同时建立的索引,多列索引使用的时候是有要求的,就是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
举个例子:
mysql> desc test1_1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int() | NO | | NULL | |
| name | varchar() | YES | | NULL | |
| grade | tinyint() | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
rows in set (0.00 sec) mysql> alter table test1_1 add index id_g (id,grade); # id为联合索引的第一个字段
Query OK, rows affected (0.01 sec)
Records: Duplicates: Warnings: mysql> explain select * from test1_1 where id = \G # 使用联合索引的第一个字段进行查询
*************************** . row ***************************
id:
select_type: SIMPLE
table: test1_1
partitions: NULL
type: ref
possible_keys: id_g #使用了索引
key: id_g
key_len:
ref: const
rows:
filtered: 100.00
Extra: NULL
row in set, warning (0.00 sec) mysql> explain select * from test1_1 where grade = \G #使用联合索引的第二个字段查询,
*************************** . row ***************************
id:
select_type: SIMPLE
table: test1_1
partitions: NULL
type: ALL
possible_keys: NULL # 发现没有使用索引
key: NULL
key_len: NULL
ref: NULL
rows:
filtered: 16.67
Extra: Using where
row in set, warning (0.00 sec) mysql> explain select * from test1_1 where id = AND grade= \G; # 使用联合索引的两个字段都作为查询条件
*************************** . row ***************************
id:
select_type: SIMPLE
table: test1_1
partitions: NULL
type: ref
possible_keys: id_g # 使用了联合索引
key: id_g
key_len:
ref: const,const
rows:
filtered: 100.00
Extra: NULL
row in set, warning (0.00 sec) ERROR:
No query specified
删除索引
删除索引一般我们要使用建立索引时的索引名,可以使用show create table table_name;\G命令来查看之前建立索引的名称。
删除索引的语法:DROP INDEX INDEX_NAME ON TABLE_NAME;
删除主键索引的语法:ALTER TABLE TABLE_NAME DROP PRIMARY KEY;
MySQL基础之 索引的更多相关文章
- MySQL基础、索引、查询优化等考察点
MySQL基础 MySQL数据类型 整数类型 TINYINT. SMALLINT. MEDIUMINT. INT. BIGINT 属性:UNSIGNED 长度:可以为整数类型指定宽度,例如:INT(1 ...
- Mysql基础知识—索引
公司最近开始尝试进行改革,如何活跃团队气氛.开发就给我们说了一些算是科普类的数据库知识,下面参杂自己的理解,方便自己后续翻看. 1.什么是索引 索引在MySQL中也叫做“键”,是存储引擎用于快速找 ...
- MySQL基础_索引
MySQL 索引(入门): 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些 ...
- MySQL基础之索引
这段时间看了好多东西却没有总结,今天在这里写一写 关于索引 索引是一种提高查询效率的方法,它是B+树的结构,从根到中间节点在到叶子节点,无需遍历全部就可以查到所需的东西 关于索引的创建 一般有俩种方式 ...
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- MySQL基础(四)——索引
MySQL基础(四)--索引
- MYSQL:基础——索引原理及慢查询优化
MYSQL:基础——索引原理及慢查询优化 索引的数据结构 索引的数据结构是B+树.如下图所示,B+树的节点通常被表示为一组有序的数据项和子指针.图中第一个节点包含数据项3和5,包含三个指针,第一个指针 ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- mysql基础之视图、事务、索引、外键
一.视图 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用 ...
随机推荐
- linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...
- 二叉树的递归,非递归遍历(C++)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易 ...
- VS2012 扩展和更新里 插件状态 为禁用 的解决办法!
在vs2012 里安装完插件,重启VS,结果 插件没有加载,查看 扩展和更新,里面显示禁用,如图: 解决方法: 点击界面上 “启用每用户扩展的加载” 蓝色文字,弹出如下界面: 选中 以管理员运行时加载 ...
- C# Claims-based(基于声明)的认证
本文是通过验证与网上资料整合的,请读者注意. 目录: 1. 什么是Claims-based认证 2.进一步理解Claims-based认证 3.Claims-based的简单demo 1. 什么是Cl ...
- MVC应用程序的jQuery代码重构
先看看这篇<在jQuery定义自己函数>http://www.cnblogs.com/insus/p/3415444.html 程序越看越是有重构的地方. 先看1部分,由于在#16代码有宣 ...
- 干货 unity小贴士
3.以Y轴为依据进行Sprite排序对于2D游戏,将Transparency Sort Mode (Edit > Project Settings > Graphics ) 设置为Cust ...
- RabbitMQ远程不能访问问题的解决
刚刚安装的RabbitMQ-Server-3.3.5,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:1567 ...
- 【Linux】查看所使用的Linux系统是32位还是64 位的方法
查看所使用的Linux系统是32位还是64 位的方法 方法一:getconf LONG_BIT # getconf LONG_BIT 1 1 我的Linux是32位!!! 方法二:arch # arc ...
- 使用 ActiveMQ 实现JMS 异步调用
目录 简介 启动 ActiveMQ 服务器 查看控制台 ActiveMQ 的消息通道 Queue Topic 比较 开发生产者和消费者 开发服务端(消费者) 开发客户端(生产者) 参考 简介 服务之间 ...
- 十分钟搞定mac下的phpstorm增加xdebug调试
一.版本信息 mac 10.10.5 php 5.5.38 phpstorm 10.0.3 xdebug 版本需要与php匹配,匹配地址 :点我匹配 点我查看所有版本 提示:不确定xdebug ...