8.6 索引

索引需要讨论的如下:1.索引的类型2.定义索引在表的创建时3.使用初始化键值4.增加索引到存在的表使用alter table或create index 3.删除索引alter table或者drop index

4.选择索引算法

8.6.1 索引的类型

1.键值primary key 是一个索引

2.唯一索引和键值索引是相似的,但是允许为NULL

3.一个非唯一的索引是一个索引任何的值可能发生多次

有些专门的索引:

1.FULLTEXT索引:专门用于文本搜索

2.SPTIAL索引:用于spatial数据类型

创建索引

使用index语句创建索引,创建唯一索引使用unique代替index。

8.6.2.2 creating and using primary keys

create table people(

   last_name char(30) not null;

   first_name char(30) not null;

   primary key (last_name,first_name));

8.6.2.3 命名索引

对于所有类型的而不是primarykey ,可以命名一个索引通过包含名字在列名前;例如,

Index NmaeIndex (LastName,FirstName),

Unique IDIndex (ID)

对于一个primarykey 无需提供名字因为名字总是primary

8.6.2.4  增加索引到存在的表

使用alter语句或者create来给存在的表增加索引:

alter table HeadOfstate ADD PRIMARY KEY (ID);

alter table HeadOfState ADD INDEX (LastName,FirstName);

create unique index IDIndex ON HeadOfState (ID);

8.6.3 选择索引算法

如果有唯一索引在一个内存表上,你应该创建他们作为HASH索引。以下是等同的:

cratetable lookup(

  id INT,

  INDEX using HASH(id)

)ENGINE=MEMORY;


create table lookup(

  id INT,

 INDEX(id))Engine=Memory;

对于memroy表,对于数值的比较使用btree算法 如下:

index using btree(id)

8.7 删除索引

alter table headofstate drop primary key;

alter table headOfState drop index nameIndex;

drop index nameindex on t;

drop index 'primary' on t;

8.8 获取表和indexmetadata

select * from information_schema.tables 

   where table_schema='world'

  and table_name='city'

可以展示数据库中的表:

show tables from world;

//描述 describe countyLanguage;

show index from country\G



你可能感兴趣的:(MYSQL-表和索引)