文档章节

Mysql_添加索引

baojun_wang
 baojun_wang
发布于 2017/03/19 15:37
字数 1346
阅读 15
收藏 0

9.1 索引简介

      索引是一个单独的存在磁盘上的数据结构,他们包含着对数据表列的所有记录的引用的指针,使用索引可以快速的查找出某个或多个列中有特定值的行

      索引是在存储引擎上实现的,每种存储引擎的索引不一定完全相同,包括索引的类型及长度

      MySql:MyISAM和InnoDB支持BTREE索引,MEMORY和HEAP支持HASH和BTREE索引

索引优点:

      1通过创建唯一索引可以包装表中的每一行数据的唯一性

      2可以大大提高查询效率

      3在实现数据的参考的完整性方面,可以加速表与表之间的连接

      4使用分组和排序子句进行查询时可以查询中分组和排序的时间

索引缺点:

      1创建和维护索引需要耗费时间,并且数据两越大,耗费时间越长

      2索引需要占用磁盘空间,如果有大量的索引,可能索引文件比数据文件先达到最大文件尺寸

      3当对表中的数据进行增删改时,索引需要动态维护,降低了数据的维护速度

索引分类:

      1普通索引和唯一索引

      普通索引:允许有空值,重复

      唯一索引:索引列的值(组合索引组合的值)唯一,可空值,但主键索引不允许有空值

      2单列索引和组合索引

      3全文索引

      FULLTEXT,在定义索引的列上支持全文查找,可空值可重复,可用于char varchartext类型的列,mysql中      只有MyiSAM存储引擎支持全文索引

      4空间索引

      创建空间索引的列必须指明not null, mysql中   只有MyiSAM存储引擎支持空间索引

索引设计原则:

      1并非索引越多越好,因为增删改时需要动态维护,且占磁盘空间

      2避免多经常更新的列添加索引

      3数据量小时不要创建索引

      4条件表达式中经常用到的不同值较多的列上创建索引

      5当唯一性是某种数据本身特征时创建唯一索引

      6在频繁进行排序和分组的列上创建索引

9.2 创建索引

9.2.1创建表的时候创建索引

基本语法格式:

create table table_name [col_name data_type]

[unique | fulltext | spatial] [index | key][index_name] (col_name[length]) [asc | desc]

1 创建普通索引

CREATE     TABLEbook

(

book_id     INT NOT NULL,

book_name VARCHAR(255) NOT NULL,

year_publication YEAR NOT NULL,

INDEX(year_publication)

);

查看索引:

SHOW INDEX FROM book

 

2 创建唯一索引

CREATE     TABLEbook2

(

book_id INT NOT NULL,

book_name VARCHAR(255) NOT NULL,

year_publication YEAR NOT NULL,

UNIQUE INDEX uniqindextext(book_id)

);

3 创建单列索引

CREATE     TABLEbook3

(

book_id INT NOT NULL,

book_name VARCHAR(255) NOT NULL,

year_publication YEAR NOT NULL,

INDEX singleIdx(book_name(20))

);

4 创建组合索引

CREATE     TABLEbook4

(

book_id INT NOT NULL,

book_name VARCHAR(255) NOT NULL,

year_publication YEAR NOT NULL,

INDEXmultiIdxTest(book_id,book_name(20),year_publication)

);

5 创建全文索引

只可以为char varchar text列创建全文索引,且要修改存储引擎,mysql引擎可以修改为MyISAM

CREATE     TABLEbook5

(

book_id INT NOT NULL,

book_name VARCHAR(255) NOT NULL,

year_publication YEAR NOT NULL,

FULLTEXT INDEX fullTextIndex(book_name)

)ENGINE=MYISAM;

6 创建空间索引

只可以为非空列创建空间索引,且要修改存储引擎,mysql引擎可以修改为MyISAM

注意:A SPATIAL index may only contain a geometrical type column

CREATE     TABLEbook6

(

book_id INT NOT NULL,

book_name GEOMETRYNOT NULL,

year_publication YEAR NOT NULL,

SPATIAL INDEX spatialIndexTest(book_name)

)ENGINE=MYISAM;

9.2.2在已经存在的表上创建索引

1使用alter table语句创建

基本语法:

alter table table_name add [unique |fulltext | spatial] [index | key] [index_name] (col_name[length,..]) [asc |desc]

1.1添加普通索引

#创建表:

CREATE     TABLEbook7

(

book_id INT NOT NULL,

book_name VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

);

#然后执行下面创建索引语句:

ALTER TABLE book7 ADD INDEXbknameInd(book_name(30));

1.2添加唯一索引

#创建表:

CREATE     TABLEbook8

(

book_id INT NOT NULL,

book_name VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

);

#然后执行下面创建语句:

ALTER TABLE book8 ADD UNIQUE INDEXbknameInd(book_name(30));

1.3添加组合索引

#创建表:

CREATE     TABLEbook9

(

book_id INT NOT NULL,

book_name VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

);

#然后执行下面创建语句:

ALTER TABLE book9 ADD INDEXbknameAndPubInd(book_name(30),year_publication);

1.4添加全文索引

#创建表:

CREATE     TABLEbook10

(

book_id INT NOT NULL,

book_name VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

)ENGINE=MYISAM;

#然后执行下面创建语句:

ALTER TABLE book10 ADD FULLTEXT INDEXnameFTIdx(book_name);

1.5添加空间索引

#创建表:

CREATE     TABLEbook11

(

book_id INT NOT NULL,

book_name GEOMETRY NOT NULL,

year_publication YEAR NOT NULL

)ENGINE=MYISAM;

#然后执行下面创建语句:

ALTER TABLE book11 ADD SPATIAL INDEXnameSPIdx(book_name);

2使用create index 创建索引

基本语法结构:

create [unique | fulltext | spatial] indexindex_name on table_name (col_name[length…]) [asc | desc]

2.1添加普通,单列,组合,唯一索引

#创建表:

CREATE     TABLEbook13

(

book_id INT NOT NULL,

book_name VARCHAR(200) NOT NULL,

book_authors VARCHAR(200) NOT NULL,

book_info VARCHAR(200) NOT NULL,

book_coment VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

);

#添加普通索引

CREATE INDEX bkName ON book13(book_name);

#添加唯一索引

CREATE UNIQUE INDEX uniqueInd ONbook13(book_id);

#添加多列索引

CREATE INDEX infoAndComIndex ONbook13(book_info(20),book_coment(50));

2.2添加全文索引

#创建表:

CREATE     TABLEbook14

(

book_id INT NOT NULL,

book_name GEOMETRY NOT NULL,

book_authors VARCHAR(200) NOT NULL,

book_info VARCHAR(200) NOT NULL,

book_coment VARCHAR(200) NOT NULL,

year_publication YEAR NOT NULL

)ENGINE=MYISAM;

#添加全文索引

CREATE FULLTEXT INDEX fullTextIndex ONbook14(book_info);

#添加空间索引

CREATE     SPATIALINDEX spatIndex ON book14(book_name);

9.3 删除索引

1使用altertable语句删除索引

格式:

alter table table_name drop indexindex_name;

2 使用dropindex语句删除索引

drop index index_name on table_name;

© 著作权归作者所有

baojun_wang
粉丝 0
博文 2
码字总数 1509
作品 0
深圳
程序员
私信 提问
MySQL专题9之MySQL索引、MySQL临时表、MySQL复制表

1、MySQL索引 - MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 - 打个比方,如果合理的设计并使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索...

极客微信条
2017/11/19
0
0
索引初识一 MySql

1 mysql索引类型【主要分4类索引】 创建索引: 1.添加PRIMARY KEY(主键索引) 【主键:一种唯一性索引,必须指定为primary key 】 mysql> ALTER TABLE ADD PRIMARY KEY ( ) 2.添加UNIQUE(唯...

技术林工
2017/05/18
0
0
Mysql 中创建索引和索引的使用问题

在数据库中合理的使用索引是提升mysql数据库的一种高效和快捷的方式,但是在索引的使用上在我的使用中发现有很多坑,因为自己之前没有认识到,所以来总结一下 索引的介绍 索引是一种特殊的文...

坏掉的牙
09/29
0
0
MySql优化的一般步骤

MySql优化的一般步骤: 1.通过show status 命令了解各种sql的执行效率   SHOW STATUS提供msyql服务器的状态信息   一般情况下,我们只需要了解以”Com”开头的指令   show session st...

落叶刀
2016/06/07
73
0
mysql添加索引

ER TABLE ADD UNIQUE ( ) 3.添加INDEX(普通索引) mysql>ALTER TABLE ADD INDEX index_name ( column ) 4.添加FULLTEXT(全文索引) mysql>ALTER TABLE ADD FULLTEXT ( ) 5.添加多列索引 mysql>......

安安-Anan
2015/10/16
7
0

没有更多内容

加载失败,请刷新页面

加载更多

ERC-777以太坊新代币标准解读

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自...

汇智网教程
35分钟前
3
0
代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部