数据库——索引

索引
     一、定义:
     不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。 
      插入,删除,更新效率变低。
     常见索引分为:(4类)
      1、主键索引(primary key);
      2、唯一索引(unique);
      3、普通索引(index);
      4、全文索引(fulltext)--解决中子文索 引问题。
     二、原理:
     索引内部维护一个二叉树,及类似二分查找,提高效率。
     (8000000条数据用索引查询大概查询23次)
     占用磁盘空间 
     当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大。
     当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引。
     三、创建索引
      1、主键索引(创建于主键约束相似,查询检索效率高)
        在创建表的时候,直接在字段名后指定 primary key 
         create table  user1(id int primary key, name varchar(30));
        在创建表的后,指定某列或某几列为主键索引 
         create table  user2(id int, name varchar(30), primary key(id)); 
        创建表以后再添加主键 
         create table  user3(id int, name varchar(30));
         alter table user3 add primary key(id);
      2、唯一索引
        在表定义时,在某列后直接指定unique唯一属性。
         create table user4(id int primary key, name varchar(30) unique);
        创建表时,在表的后面指定某列或某几列为unique
         create table user5(id int primary key, name varchar(30), unique(name));
        创建表以后再添加唯一
         create table user6(id int primary key, name varchar(30));
         alter table user6 add unique(name);
      3、普通索引  (可以有多个普通索引,即某列值有重复时,使用普通索引)
        在表的定义后,指定某列为索引
         create table user8(id int primary key,  
           name varchar(20),  
           email varchar(30),     
           index(name) --指定name列
         );
        创建完表以后指定某列为普通索引
          create table user9(
          id int primary key, 
          name varchar(20),
          email varchar(30)
          );
          alter table user9 add index(name); --修改表
        创建一个索引名为 idx_name 的索引   
           create table user10(
           id int primary key,
           name varchar(20), 
           email varchar(30)
           ); 
           -- 创建一个索引名为 idx_name 的索引    
           create index idx_name on user10(name);
      4、全文索引
        要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。
        如果对中文进行全文检索,可以使用 sphinx的中文版(coreseek)。
        全文查询语法:
           explain select* from articles where match (title,body) against ('database')\G 
         FULLTEXT 关键字  全索引;
         explain :返回分析结果,判断是否使用到索引;
         Java领域的全文检索:eleslicsearch、Solr
    四、查询索引
      1、 show keys from 表名
      2、 show index from 表名; 
      
          show keys from goods\G   
          *********** 1. row ***********    
          Table: goods    <= 表名    
          Non_unique: 0        <= 0表示唯一索引 
          Key_name: PRIMARY  <= 主键索引    
          Seq_in_index: 1     
          Column_name: goods_id <= 索引在哪列  
          Collation: A     
          Cardinality: 0    
          Sub_part: NULL      
          Packed: NULL         
          Null:      
          Index_type: BTREE   <= 以二叉树形式的索引       
          Comment: 1 row in set (0.00 sec)    
          
       3、  desc 表名;  (信息比较简略)

    五、删除索引
       第一种方法-删除主键索引:
            alter table 表名 drop primary; 
       第二种方法-其他索引的删除:
         alter table 表名 drop index 索引名;(索引名就是show keys from 表名 中的 Key_name 字段) 
       第三种方法方法:
         drop index 索引名 on 表名 
    六、创建索引原则:
        1、频繁作为查询条件的字段应该创建索引;
        2、唯一性太差的字段不适合单独创建索引;
        3、更新非常频繁的字段不适合创建索引;
        4、不会出现在where字句中的字段不该创建索引;

猜你喜欢

转载自blog.csdn.net/fayfayfaydyt/article/details/82187185