索引需要讨论的如下: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