欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

索引( index )

程序员文章站 2022-07-09 09:35:06
...

索引在庞大的数据库上最能体现出作用,所谓索引就是根据需求将指定的列提取出来做索引表,可以显著提高在查找数据方面的速度。

在索引的前提下还可以指定索引值是否唯一,索引值是单列或是多列索引。

 

根据索引类型,索引分为:

  普通索引:

      name,只能帮助查找
  唯一索引:
      name,只能帮助查找,内容不允许重复,可以为null,但也限制唯一。
  主键索引:
      name,只能帮助查找,内容不允许重复,不允许null,一张表只能有一个主键,但也可以通过unique进行组合
  组合索引:
      多列共同组成索引,可以有如下模式,1 是不约束的就是说不唯一,2是唯一的
      普通多列索引(name,email)
      联合唯一索引(name,email)
 
根据索引方式又分为: 
  覆盖索引
      当查询的数据是从索引表里面查找的,则是覆盖索引
  索引合并
      将两个单独的索引放到一起,就是索引合并。
 
默认的查找方式是全表扫描。
 
在创建表时创建索引:
create table person(id int not null primary key auto_increment,name char(10) not null,age int not null,address varchar(100) not null,index index_name(name));
 
普通索引:
create index index_name on person(pname);

 

删除索引:

drop index_name on tableName;

 查看索引:

show index from tableName;

 

唯一索引:

  建表时创建唯一索引:

create table person(id int not null primary key auto_increment,name char(10) not null,age int not null,address varchar(100) not null,unique index_name(name));

  创建唯一索引:

creae unique index index_name on tableName(ColumnName);

   删除唯一索引:

 drop unique index index_name on tabeName; 

 

 

主键索引:

  创建表时创建索引:

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
)

OR

create table in1(
    nid int not null auto_increment,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    primary key(ni1),
    index ix_name (name)
)

创建表 + 创建主键

 

  创建索引:

   alter table tableName primary key(ColumnName); 

  

  删除索引:

  

方式一:
alter table tableName drop primary key;

方式二:
alter table tableName modify ColumnName int,drop primary key;

 

组合索引:

设有如下表:

create table tb1(id int not null primary key auto_incremet,name char(10) not null,age int(2) not null,other text)engine=innoDB default charset=utf8;

创建组合索引:

 create index index_name on tableName(columnName1,columnName2); 

如上创建组合索引之后,查询:

  • name and email  -- 使用索引
  • name                 -- 使用索引
  • email                 -- 不使用索引

注意:对于同时搜索n个条件时,组合索引的性能好于多个单一索引合并。

 

other:

explain  关键字可以查看查询语句是通过何种方式查找数据。
explain select * from person where xx=xx;
如果type列示 all则表示全表扫描
如果是ref 则是通过索引查找的
 
all 表示 全表扫描
ref 表示 普通索引查找
const 唯一索引查找 /  主键索引也是const
 组合索引 表示
 
在全表扫描模式下,如果想达到索引效果,可以用limit 1; 如果只要求一条数据的话。limit 1 表示取得一条数据后就返回。
 
在 like 模式下, 如果 "%xx" 模式一般不走索引模式,因为前缀为% 表示一切皆有可能, 如果要走索引模式 必须为: “xx%”
reverse(列名) 也一样不走模式。除非是值 reverse(value)
 
对于比较运算符 来说 一般除了大于 和 不等于 不走索引外,其余的一般都走索引。
对于 or 运算符 ,只有 当or 两边的索引都是索引才走索引,否则不走。