MySQL基础之第7章 索引
第7章 索引
MySQL中,所有的数据类型都可以被索引,包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等。
7.1、索引简介
7.1.1、索引的含义和特点
BTREE索引,HASH索引
优点:提高查询,联合查询,分级和排序的时间
缺点:索引占空间,维护(创建,更新,维护)索引时需要耗费时间
7.1.2、索引的分类
1、普通索引
不加任何限制条件
2、唯一性索引
使用UNIQUE参数
3、全文索引
使用FULLTEXT参数,只能创建在CHAR,VARCHAR,TEXT类型的字段上,只有MyISAM存储引擎支持全文索引。
4、单列索引
在一个字段上建立的普通索引,唯一性索引或全文索引
5、多列索引
在多个字段上建立的普通索引,唯一性索引或全文索引
6、空间索引
使用SPATIAL参数,只有MyISAM存储引擎支持空间索引,必须建立在空间数据类型上,且必须非空,初学者很少用到。
7.1.3、索引的设计原则
1、选择唯一性索引
2、为经常需要排序、分组和联合操作的字段建立索引
如ORDER BY、GROUP BY、DISTINCT,UNION等操作的字段,特别是排序
3、为常作为查询条件的字段建立索引
4、限制索引的数目
避免过多地浪费空间
5、尽量使用数据量少的索引
6、尽量使用前缀来索引
如指索引TEXT类型字段的前N个字符
7、删除不再使用或者很少使用的索引
7.2、创建索引
三种方式:
1、 创建表时创建索引
2、 已经存在的表上创建索引
3、 使用ALTER TABLE语句来创建索引
7.2.1、创建表的时候创建索引
CREATE TABLE 表名 (属性名 数据类型 [完整约束条件],
属性名数据类型 [完整约束条件],
…
[UNIQUE|FULLTEXT|SPATIALINDEX|KEY [别名] (属性名1 [(长度)] [ASC|DESC])
);
1、创建普通索引
CREATE TABLEindex1 (id INT,
name VARCHAR(20),
sex BOOLEAN,
INDEX(id)
);
SHOW CREATETABLE index1\G;
2、创建唯一性索引
CREATE TABLEindex2(id INT UNIQUE,
name VARCHAR(20),
UNIQUE INDEX index2_id(id ASC)
);
SHOW CREATETABLE index2\G;
看到在字段id上建立了两个唯一索引id和index2_id,当然这样是没有必要的。
3、创建全文索引
CREATE TABLEindex3 (id INT,
info VARCHAR(20),
FULLTEXT INDEX index3_info(info)
) ENGINE=MyISAM;
4、创建单列索引
CREATE TABLEindex4 (id INT,
subject VARCHAR(30),
INDEXindex4_st(subject(10))
);
注意:只索引subject前10个字符
5、创建多列索引
CREATE TABLEindex5 (id INT,
name VARCHAR(20),
sex CHAR(4),
INDEX index5_ns(name,sex)
);
EXPLAIN select *from index5 where name=’123’\G;
EXPLAIN select *from index5 where name=’123’and sex=’N’\G;
6、创建空间索引
CREATE TABLEindex6 (id INT,
Space GEOMETRY NOT NULL,
SPATIAL INDEX index6_sp(space)
)ENGINE=MyISAM;
7.2.2、在已经存在的表上创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL]INDEX 索引名 ON 表名 (属性名[(长度)] [ASC|DESC]);
1、创建普通索引
CREATE INDEX index7_id on example0(id);
2、创建唯一性索引
CREATE UNIQUEINDEX index_8_id ON index8(course_id);
3、创建全文索引
CREATE FULLTEXTINDEX index9_info ON index9(info);
4、创建单列索引
CREATE INDEX index10_addr ON index10(address(4));
5、创建多列索引
CREATE INDEX index11_na ON index11(name, address);
6、创建空间索引
CREATE SPATIALINDEX index12_line on index12(line);
7.2.3、用ALTER TABLE语句来创建索引
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 (属性名[(长度)][ASC|DESC]);
1、创建普通索引
ALTER TABLE example0 ADD INDEX index12_name(name(20));
2、创建唯一性索引
ALTER TABLE index14 ADD UNIQUE INDEX index14_id(course_id);
3、创建全文索引
ALTER TABLE index15 ADD INDEX index15_info(info);
4、创建单列索引
ALTER TABLE index 16 ADD INDEX index16_addr(address(4));
5、创建多列索引
ALTER TABLE index17 ADD INDEX index17_na(name, address);
6、创建空间索引
ALTER TABLE index18 ADD INDEX index18_line(line);
7.3、删除索引
DROP INDEX 索引名 ON 表名;
DROP INDEX id ONindex1;
MySQL基础之第7章 索引的更多相关文章
- MySQL基础之第18章 性能优化
18.1.优化简介 SHOW STATUS LIKE ‘value’;connections 连接数uptime 启动 ...
- MySQL基础之第5章 操作数据库
假设已经登录 mysql-h localhost -uroot -proot 5.1.显示.创建.删除数据库 show databases; 显示所有的数据库 create database ...
- MySQL基础之第1章 数据库概述
1.1.数据存储方式 1.人工管理阶段2.文件系统阶段3.数据库系统阶段 1.2.数据库泛型 数据库泛型就是数据库应该遵循的规则.数据库泛型也称为范式.目前关系数据库最常用的四种范式分别是:第一范式( ...
- MySQL基础笔记(四) 索引
一.什么是索引 索引(Index),可以看作一个指针,指向表里的数据.当数据库没有索引时,查找信息通常是全表扫描:使用了索引,它就会直接引导到数据在表里的准确物理位置. 优点:索引的主要目的是提高数据 ...
- MySQL基础之第17章 MySQL日志
17.1.日志简介 二进制日志错误日志通用查询日志慢查询日志 17.2.二进制日志 二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况.通过二进制日志可以查询MySQL数据 ...
- MySQL基础之第16章 数据备份与还原
16.1.数据备份 16.1.1.使用 mysqldump 命令备份 mysqldump [OPTIONS] database [tables]mysqldump [OPTIONS] --databa ...
- MySQL基础之第15章 MySQL用户管理
15.2.账户管理 15.2.1.登录和退出MySQL服务器 mysql –hhostname|hostIP –P port –u username –p[password] databaseName ...
- MySQL基础之第14章 存储过程和函数
避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...
- MySQL基础之第13章 MySQL函数
13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...
随机推荐
- uva 11489
简单博弈 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #i ...
- hibernate 多对多
HibernateHibernate多对多关联映射通常别拆分成两个多对一关联映射1. 下面的HostBean.UserBean.UserHostBean,UserHostBean是两个表之间的关联表, ...
- 如何使用yum来下载RPM包而不进行安装
如何使用yum来下载RPM包而不进行安装 2015-03-23 13:15 theo-l译 linux.cn 字号:T | T yum是基于Red Hat的系统(如CentOS.Fedora.RHEl ...
- 轻轻修改配置文件完成 OpenStack 监控
当我们使用虚拟化云平台 OpenStack 时,必然要时时监控其虚拟机性能,随着近年企业级数据中心的不断发展,像混合虚拟化环境的业务需求也在持续增长中,因而也随之带来的监控需求更显重要,所以小编带来一 ...
- 精华阅读第 10 期 |解开阿尔法狗(AlphaGo)人工智能的画皮
谷歌用一个变了身的古老「穷举算法」,披上「神经网络」的画皮,假装「跨时代」的黑科技,忽悠广大「膜拜者」,「狮仙」我实在看不下去了,来揭一揭这只幺蛾子小狗的画皮. 本期是移动开发精英俱乐部的第10期推荐 ...
- Java Socket编程readLine返回null,read返回-1的条件
客户端正常关闭socket的时候,服务器端的readLine()方法会返回null,或者read()方法会返回-1
- [2-sat]HDOJ3622 Bomb Game
题意:给n对炸弹,每对炸弹选其中一个爆炸. 每个炸弹爆炸的半径相同 圆不能相交, 求最大半径 2-sat简介 二分半径, 枚举n*2个炸弹 若i炸弹与j炸弹的距离小于半径*2 则建边 比如 第一对炸 ...
- [2-sat]HDOJ1824 Let's go home
中问题 题意略 和HDOJ 3062一样 这里 每个队员都有 选 和 不选 两种, 即 上篇所说的$x$和$x’$ 建图:队长(a)留下或者其余两名队员(b.c)同时留下 那么就是$a' \Right ...
- hdu1301Jungle Roads
http://acm.hdu.edu.cn/showproblem.php?pid=1301 最小生成树模板题 #include<iostream> #include<stdio.h ...
- ubuntu安装google 输入法
12.04 LTS Precise sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 sudo apt-get in ...