MySQL在创建数据表的时候创建索引
MySQL在创建数据表的时候创建索引
在MySQL中创建表的时候,可以直接创建索引。基本的语法格式如下:
- CREATE TABLE 表名(字段名 数据类型 [完整性约束条件],
- [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
- [索引名](字段名1 [(长度)] [ASC | DESC])
- );
- UNIQUE:可选。表示索引为唯一性索引。
- FULLTEXT;可选。表示索引为全文索引。
- SPATIAL:可选。表示索引为空间索引。
- INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。
- 索引名:可选。给创建的索引取一个新名称。
- 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
- 长度:可选。指索引的长度,必须是字符串类型才可以使用。
- ASC:可选。表示升序排列。
- DESC:可选。表示降序排列。
MySQL创建普通索引
创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。
实例:创建一个名为index1的数据表,在表内的id字段上建立一个普通索引。
1. 创建普通索引的SQL代码如下:
- CREATE TABLE index1(id INT,
- name VARCHAR(20),
- sex BOOLEAN,
INDEX(id)
- );
在DOS提示符窗口中查看MySQL创建普通索引的操作效果。如下图所示:
从上图中可以看出,运行结果显示普通索引创建成功。
2. 使用SHOW CREATE TABLE语句查看表的结构。如下图所示:
从上图中可以看出,在id字段上已经建立了一个名为id的普通索引。
语句:
- KEY `id` (`id`)
圆括号内的id是字段名称,圆括号左侧外面的id是索引名称。
3. 使用EXPLAIN语句查看索引是否被使用。SQL代码如下:
- EXPLAIN SELECT * FROM index1 where id=1 \G
在DOS提示符窗口中查看使用EXPLAIN语句查看索引是否被使用的操作效果。如下图所示:
上图中的结果显示,possible_keys和key的值都为id。说明id索引已经存在,并且查询时已经使用了索引。
MySQL创建唯一性索引
如果使用UNIQUE参数进行约束,则可以创建唯一性索引。
实例:创建一个名为index2的数据表,在表内的id字段上建立一个唯一性索引,并且设置id字段以升序的形式排列。
1. 创建一个唯一性索引的SQL代码如下:
- CREATE TABLE index2(id INT UNIQUE,
- name VARCHAR(20),
UNIQUE INDEX index2_id(id ASC)
- );
index2_id是为唯一性索引起的一个新名字。
在DOS提示符窗口中查看MySQL创建唯一性索引的操作效果。如下图所示:
从上图中可以看出,运行结果显示创建成功。
2. 使用SHOW CREATE TABLE语句查看表的结构。SQL代码如下:
- SHOW CREATE TABLE index2 \G
在DOS提示符窗口中查看使用SHOW CREATE TABLE语句查看表的结构的效果。如下图所示:
从上图中可以看出,在id字段上建立了名为id和index2_id的两个唯一性索引。这样做,可以提高数据的查询速度。
如果在创建index2表时,id字段没有进行唯一性结束。如下所示:
- CREATE TABLE index2(id INT,
- name VARCHAR(20),
UNIQUE INDEX index2_id(id ASC)
- );
则也可以在id字段上成功创建名为index2_id的唯一性索引。但是,这样可能达不到提高查询速度的目的。
MySQL创建全文索引
全文索引使用FULLTEXT参数,并且只能在CHAR、VARCHAR或TEXT类型的字段上创建。
全文索引可以用于全文搜索。
现在,MyISAM存储引擎和InnoDB存储引擎都支持全文索引。
实例:创建一个名为index3的数据表,在表中的info字段上建立名为index3_info的全文索引。
1. 创建全文索引的SQL代码如下:
- CREATE TABLE index3(id INT,
- info VARCHAR(20),
FULLTEXT INDEX index3_info(info)
- )ENGINE=MyISAM;
如果设置ENGINE=InnoDB,则可以在InnoDB存储引擎上创建全文索引。
在DOS提示符窗口中查看MySQL创建全文索引的操作效果。如下图所示:
从上图中可以看出,代码的执行结果显示创建成功。
2. 使用SHOW CREATE TABLE语句查看index3数据表的结构。如下图所示:
从上图中可以看出,在info字段上已经建立了一个名为index3_info的全文索引。
注意
我使用的是MySQL 5.6.19版本,已经可以在InnoDB存储引擎中创建全文索引了。
全文索引非常适合于大型数据集,对于小的数据集,它的用处可能比较小。
MySQL创建单列索引
单列索引是在数据表的单个字段上创建的索引。一个表中可以创建多个单列索引。唯一性索引和普通索引等都为单列索引。
实例:创建一个名为index4的数据表,在表中的subject字段上建立名为index4_st的单列索引。
1. 创建单列索引的SQL代码如下:
- CREATE TABLE index4(id INT,
- subject VARCHAR(30),
INDEX index4_st(subject(10))
- );
在DOS提示符窗口中查看MySQL创建单列索引的操作效果。如下图所示:
从上图中可以看出,代码执行的结果显示创建成功。
2. 使用SHOW CREATE TABLE语句查看index4数据表的结构。如下图所示:
从上图中可以看出,在subject字段上已经建立了一个名为index4_st的单列索引。
注意:subject字段长度为30,而index4_st设置的索引长度只有10,这样做是为了提高查询速度。对于字符型的数据,可以不用查询全部信息,而只查询它前面的若干字符信息。
MySQL创建多列索引
创建多列索引是在表的多个字段上创建一个索引。
实例:创建一个名为index5的数据表,在表中的name和sex字段上建立名为index5_ns的多列索引。
1. 创建多列索引的SQL代码如下:
- CREATE TABLE index5(id INT,
- name VARCHAR(20),
- sex CHAR(4),
INDEX index5_ns(name,sex)
- );
在DOS提示符窗口中查看MySQL创建多列索引的操作效果。如下图所示:
从上图中可以看出,代码的执行结果显示index5_ns索引创建成功。
2. 使用SHOW CREATE TABLE语句查看index5数据表的结构。如下图所示:
从上图中可以看出,name和sex字段上已经建立了一个名为index5_ns的多列索引。
3. 多列索引中,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。
先在index5数据表中添加一些数据记录,然后使用EXPLAIN语句可以查看索引的使用情况。如果只是使用name字段作为查询条件进行查询。如下图所示:
从上图中可以看出,possible_keys和key的值都是index5_ns。Extra(额外信息)显示正在使用索引。这说明使用name字段进行索引时,索引index5_ns已经被使用。
4. 如果只使用sex字段作为查询条件进行查询。如下图所示:
从上图中可以看出,possible_keys和key的值都是NULL。Extra(额外信息)显示正在使用where条件查询,而未使用索引。
提示
使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。因此,在优化查询速度时,可以考虑优化多列索引。
MySQL创建空间索引
使用SPATIAL参数能够创建空间索引。创建空间索引时,表的存储引擎必须是MyISAM类型。而且,索引字段必须有非空约束。
实例:创建一个名为index6的数据表,在表中的space字段上建立名为index6_sp的空间索引。
1. 创建空间索引的SQL代码如下:
- CREATE TABLE index6(id INT,
- space GEOMETRY NOT NULL,
SPATIAL INDEX index6_sp(space)
- )ENGINE=MyISAM;
在DOS提示符窗口中查看MySQL创建空间索引的操作效果。如下图所示:
从上图可以看出,代码执行的结果显示空间索引创建成功。
2. 使用SHOW CREATE TABLE语句可看index6数据表的结构。如下图所示:
从上图中可以看出,在space字段上已经建立了一个名为index6_sp的空间索引。
注意,space字段是非空的,而且数据类型是GEOMETRY类型。这个类型是空间数据类型。
空间数据类型包括GEOMETRY、POINT、LINESTRING和POLYGON类型等。这些空间数据类型平时很少用到
MySQL在创建数据表的时候创建索引的更多相关文章
- oracle的学习 第二节:创建数据表
学习内容: A.创建数据库和表空间 B.创建用户和分配权限 C.创建数据表 一.创建数据库和表空间 (一)SQL语言的基本概念 1.概念 高级的结构化查询语言:沟通数据库服务器和客户的重要桥梁. PL ...
- Oracle 创建数据表
数据库中的每一个表都被一个模式(或用户)所拥有,因此表是一种典型的模式对象.在创建数据表时,Oracle 将在一个指定的表空间中为其分配存储空间.最初创建的表时一个空的逻辑存储结构,其中不包含任何数据 ...
- Oracle 创建数据表以及对数据表、字段、主外键、约束的操作
选择主键的原则: 最少性 尽量选择使用单个键作为主键 稳定性 尽量选择数值更新少的列作为主键 1.创建数据表(CREATE TABLE) --创建数据表Student create table Stu ...
- MySQL学习笔记_2_MySQL创建数据表(上)
MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...
- MySQL创建数据表
* 创建数据表 * * * 一.什么是数据表 * * * * 二.创建数据表的SQL语句模型 * * DDL * * ...
- MySQL 创建数据表
MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...
- Mysql学习(慕课学习笔记4)创建数据表、查看数据表、插入记录
创建数据表 Create table [if not exists] table_name(column_name data_type,…….) UNSIGNED 无符号SIGNED 有符号 查看创建 ...
- MySQL学习笔记_4_MySQL创建数据表(下)
MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ...
- MySQL学习笔记_3_MySQL创建数据表(中)
MySQL创建数据表(中) 三.数据字段属性 1.unsigned[无符号] 可以让空间增加一倍 比如可以让-128-127增加到0-255 注意:只能用在数值型字段 2.zerofill[前导零] ...
随机推荐
- 搭建一个基于CentOS的可视化zookeeper管理工具zkUI实现对zk的可视化管理
一. zookeeper 可视化工具 JMX => CLRProfile ZKUI => java写的一个可视化的web网站 github中下载 https://github.com/ ...
- HTML5使用总结(一)
自己在“上海某985大学”待了五年,有蛮多的不舍.但是终究还是要离开.下面对这几年HTML5的使用做一个总结.总结是一种技术的沉淀.HTML5大家现在很火,它的标准已经出来.在标准还没有成型的时候,相 ...
- XEvent--Demo--使用XEvent来捕获在数据库DB1上发生的锁请求和锁释放
--==============================================================--使用XEvent来捕获在数据库DB1上发生的锁请求和锁释放--=== ...
- 【ocp-12c】最新Oracle OCP-071考试题库(46题)
46.(10-4) choose two: Examine the data in the CUST_NAME column of the CUSTOMERS table. CUST_NAME --- ...
- java -io字符流FileWrite操作演示
FileWriter字符输出流演示: /* * FiileWriter 字符流的操作 * FileWriter 的构造方法 可传递 File类型 还可以传递String类型 * * 方法 : * wr ...
- 网卡NAT方式下虚拟机安装FTP服务
在windows8下安装Oracle VM VirtualBox虚拟机,虚拟机中安装的CentOS操作系统,在CentOS中搭建LNMP环境,安装vsftpd服务器,宿主机在phpStorm编程,将代 ...
- redis cluster 的ERR max number of clients reached 问题排查
早上发现微服务连不上redis cluster了,看来下日志如下 [root@win-jrh378d7scu 7005]# bin/redis-cli -c -h 15.31.213.183 -p 7 ...
- 查看inux系统类型和版本
当我们使用一台新的linux服务器的时候,为了区分他们的命令,我们首先第一步就是要搞清楚这个系统的类型和版本号,据此再来使用对应的命令. 下面来看看可以使用以下基本命令来查看 Linux 发行版名称和 ...
- 敏感词过滤的算法原理之DFA算法
参考文档 http://blog.csdn.net/chenssy/article/details/26961957 敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有 ...
- Protocol Buffers介绍及例子
Protocol Buffers介绍及例子 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或数据交换格式.可用于通讯协 ...