MySQL中索引的使用

 

MySQL索引概述

  • 索引是一种将数据库中单列或多列的值进行排序的结构
  • 通过索引查询数据,可以提高查询速度,也可降低服务器的负载

MySQL索引分类

  • 普通索引(不应用任何限制条件的索引,可在任何数据类型中创建)
  • 唯一索引(索引的值必须唯一)
  • 全文索引(只创建在charvarchartext类型的字段上)
  • 单列索引(只对应一个字段的索引)
  • 多列索引(在表的多个字段上创建一个索引)
  • 空间索引(只能建立在空间数据类型上)

创建索引

语法:

create  table  table_name

(

    属性名 数据类型[约束条件],

    属性名 数据类型[约束条件],

    ......

   [unique|fulltext|spatial] index }key[别名](属性名[ASC|DESC])

);

创建普通索引

#普通索引
create table score
(
	id int auto_increment primary key not null,
	name varchar(30) not null,
	math int not null,
	english int not null,
	chinese int not null,
	index(id)
);

show create table score;

创建唯一索引

#唯一索引
create table t_address
(
	id int auto_increment primary key not null,
	name varchar(30),
	address varchar(200),
	unique index UQ_address(id asc)
);

show create table t_address

创建全文索引

#全文索引
create table cards
(id int auto_increment primary key not null,
name varchar(30),
number int,
info varchar(50),
fulltext key ftk_number(number)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

MySql自带的全文索引只能用于数据库引擎为MYISAM的数据表,如果是其他数据引擎,则全文索引不会生效。此外,MySql自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。

目前,使用MySql自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySql全文索引所能找到的词默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。

如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

创建单列索引

#单列索引
create table telephone
(
	id int auto_increment primary KEY not null,
	name varchar(30),
	tel varchar(30),
	index idx_tel(tel(20))
);

创建多列索引

#多列索引
create table information
(
	id int primary key auto_increment not null,
	name varchar(30) not null,
	sex varchar(30) not null,
	birthday VARCHAR(30) not null,
	index idx_name_sex(name,sex)
);

创建空间索引

#空间索引
create table list
(
	id int PRIMARY key auto_increment not null,
	goods geometry not null,
	spatial index spt(goods)
)engine=myisam;

建立的数据表中创建索引 

语法:
   create [unique|fulltext|spatial] index index_name
   on table_name(属性[(length)][ASC|DESC]);
#在已有的表上创建索引
create index idx_id on t1(id)

修改数据表结构添加索引

语法:
  alter table table_name add[unique|fulltext|spatial] index index_name(属性名[(length)][ASC|DESC]);
#添加索引
alter table t1
add unique index idx_name(name(10))

删除索引 

语法:
     drop index  index_name  on table_name


#删除索引
drop index idx_name on t1

猜你喜欢

转载自blog.csdn.net/pigziprogrammer/article/details/95317625