第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章 索引的更多相关文章

  1. MySQL基础之第18章 性能优化

    18.1.优化简介 SHOW STATUS LIKE ‘value’;connections                 连接数uptime                          启动 ...

  2. MySQL基础之第5章 操作数据库

    假设已经登录 mysql-h localhost -uroot -proot 5.1.显示.创建.删除数据库 show databases;     显示所有的数据库 create database ...

  3. MySQL基础之第1章 数据库概述

    1.1.数据存储方式 1.人工管理阶段2.文件系统阶段3.数据库系统阶段 1.2.数据库泛型 数据库泛型就是数据库应该遵循的规则.数据库泛型也称为范式.目前关系数据库最常用的四种范式分别是:第一范式( ...

  4. MySQL基础笔记(四) 索引

    一.什么是索引 索引(Index),可以看作一个指针,指向表里的数据.当数据库没有索引时,查找信息通常是全表扫描:使用了索引,它就会直接引导到数据在表里的准确物理位置. 优点:索引的主要目的是提高数据 ...

  5. MySQL基础之第17章 MySQL日志

    17.1.日志简介 二进制日志错误日志通用查询日志慢查询日志 17.2.二进制日志 二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况.通过二进制日志可以查询MySQL数据 ...

  6. MySQL基础之第16章 数据备份与还原

    16.1.数据备份 16.1.1.使用 mysqldump 命令备份 mysqldump [OPTIONS] database [tables]mysqldump [OPTIONS] --databa ...

  7. MySQL基础之第15章 MySQL用户管理

    15.2.账户管理 15.2.1.登录和退出MySQL服务器 mysql –hhostname|hostIP –P port –u username –p[password] databaseName ...

  8. MySQL基础之第14章 存储过程和函数

    避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...

  9. MySQL基础之第13章 MySQL函数

    13.1.数学函数 随机数可能会用到,其他基本无视. 13.2.字符串函数 重点CONCAT(S1,S2….) 13.3.日期和时间函数 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ...

随机推荐

  1. Windows 进程通信 之 DDE技术

    DDE (Dynamic Data Exchange,DDE)动态数据交换,是一种进程间通信机制,它最早是随着Windows由微软提出的.当前大部分软件仍旧支持DDE,但最近十年里微软已经停止发展DD ...

  2. spring mvc 注解 annot失效

    如果带上事务,那么用annotation方式的事务注解和bean配置,事务会失效,要将service bean配置到xml文件中才行 这个问题是由于问答上有解决方案 引用 这个问题很经典了 在主容器中 ...

  3. $('li','div') $('div li') $('div li')

    $('div','li')是$(子,父),是从父节点里找子,而不是找li外面的div $('div , li')才是找所有的div和li,之间不存在父子关系 $('div li') 是找div里面所有 ...

  4. HDU 1546 Idiomatic Phrases Game(最短路,Dijsktra,理解题意很重要)

    题目 1.注意因为要判断能不能到达,所以要在模版里面判断k有没有更新. 2.看懂题目意思和案例的解法很重要. #define _CRT_SECURE_NO_WARNINGS //题目大意:现要进行单词 ...

  5. Javascript中appendChilid()内涵

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. spring webservice 开发demo (实现基本的CRUD 数据库采用H2)

    在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas   ...

  7. 360云盘、百度云、微云……为什么不出 OS X(Mac 端)应用呢?(用户少,开发成本高)(百度网盘Mac版2016.10.18横空出世)

    已经说的很好了,现有的云盘所谓的 OS X 版只有云同步功能,不过 115 是个例外,不过 115 的现状……不言自明.接下来说点和本题答案无关的,其实在官方客户端流氓 + 限速的大背景下 OS X ...

  8. JDBC学习总结(一)

    1.JDBC概述     JDBC是一种可以执行SQL语句并可返回结果的Java API,其全称是Java DataBase Connectivity,也是一套面向对象的应用程序接口API,它由一组用 ...

  9. jquery index()方法

    搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置.        如果参数是一 ...

  10. linux下拷贝整个目录

    该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大. 语法:cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件或 ...