通过索引可以让我们更快速的获取SQL里面的结果

索引的分类

在一个表中,主键索引只能有一个,唯一索引可以有多个。

主键索引 (PRIMARY KEY)

唯一标识,主键不可以重复,只能有一个列作为主键

唯一索引 (UNIQUE KEY)

避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引

常规索引 (KEY)

默认的,index,key关键字来设置

全文索引 (FullText)

在特定的数据库引擎下才有 MyISAM
快速定位数据

基础语法

  1. -- ==================索引的使用=====================
  2. -- 1.在创建表的时候给字段增加索引
  3. -- 2.创建完毕后,增加索引
  4. -- 显示所有的索引信息
  5. SHOW INDEX FROM student
  6. -- 增加一个索引
  7. ALTER TABLE `student` ADD FULLTEXT INDEX `studentName`(`studentName`)
  8. -- 分析sql执行的状况
  9. EXPLAIN SELECT * FROM student -- 非全文索引
  10. SELECT * FROM student WHERE MATCH(studentName) AGAINST('李')
/*
#方法一:创建表时
    CREATE TABLE 表名 (
               字段名1 数据类型 [完整性约束条件…],
               字段名2 数据类型 [完整性约束条件…],
               [UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY
               [索引名] (字段名[(长度)] [ASC |DESC])
               );
#方法二:CREATE在已存在的表上创建索引
       CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
                    ON 表名 (字段名[(长度)] [ASC |DESC]) ;
#方法三:ALTER TABLE在已存在的表上创建索引
       ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
                            索引名 (字段名[(长度)] [ASC |DESC]) ;
#删除索引:DROP INDEX 索引名 ON 表名字;
#删除主键索引: ALTER TABLE 表名 DROP PRIMARY KEY;
#显示索引信息: SHOW INDEX FROM student;
*/
/*增加全文索引*/
ALTER TABLE `school`.`student` ADD FULLTEXT INDEX `studentname` (`StudentName`);
/*EXPLAIN : 分析SQL语句执行性能*/
EXPLAIN SELECT * FROM student WHERE studentno='1000';
/*使用全文索引*/
-- 全文搜索通过 MATCH() 函数完成。
-- 搜索字符串作为 against() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。
EXPLAIN SELECT *FROM student WHERE MATCH(studentname) AGAINST('love');
/*
开始之前,先说一下全文索引的版本、存储引擎、数据类型的支持情况
MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;
MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;
只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
测试或使用全文索引时,要先看一下自己的 MySQL 版本、存储引擎和数据类型是否支持全文索引。
*/