索引类型与索引方式
一、索引类型
mysql常用索引分为:普通索引、唯一索引、主键索引、组合索引、全文索引
1、普通索引关键字:Normal
普通索引是最基本的索引类型,唯一的任务是加快对数据的访问速度,没有任何限制。
默认会使用btree。
//1、 直接创建索引
create index index_name on table(column(length));
// 常规创建
create index index_name on user(name);
// 针对字符串的前几个字符进行创建索引,节省空间,减少比较时间、解决排序问题
create index index_name on user(name(5));
//2、修改表结构的方式新增索引
alter table table_name add index index_name(column(length));
// 常规创建
alter table user add index index_name(name);
//对字符串的前几个字符进行创建索引
alter table user add index index_name(name(10));
// 3、创建表的时候同时创建索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` char(20) CHARACTER NOT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (name(length))
)
// 4、删除索引
drop index index_name on table;
2、唯一索引
关键字:Unique
索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
//1、 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
// 常规创建
create unique index index_name on user(name);
//2、修改表结构
ALTER TABLE table_name ADD UNIQUE indexName(column(length))
// 常规创建
alter table user add unique index index_name(name);
// 3、创建表的时候直接指定
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` char(20) CHARACTER NOT NULL ,
PRIMARY KEY (`id`),
UNIQUE INDEX index_name (name(length))
)
3、主键索引
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) NOT NULL ,
PRIMARY KEY (`id`)
);
4、组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。
ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
5、全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的- where语句的参数匹配。
fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用。
目前只有char、varchar,text 列上可以创建全文索引。
在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。
// 创建表的适合添加全文索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`content` text CHARACTER NULL ,
PRIMARY KEY (`id`),
FULLTEXT (content)
);
// 修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)
// 直接创建索引
CREATE FULLTEXT INDEX index_content ON article(content)
二、索引方式
mysql索引方式分为:BTREE和HASH。
1、BTREE可理解为”排好序的快速查找结构”
每个叶子节点到根节点距离相等
所有被索引的列都是排过序的
适合范围查找、支持数据排序
2、HASH理论查询时间复杂度为O(1)
在磁盘随机存放数据
仅支持”=”,”IN”和”<=>”精确查询,不能使用范围查询
不支持排序
无法进行前缀索引
在任何时候都不能避免表扫描
检索效率高,索引的检索可以一次定位
只有Memory引擎支持显式的Hash索引
必须回行,通过索引拿到数据位置,必须回到表中取数据