(2.8)Mysql之SQL基础——索引的分类与使用

(2.8)Mysql之SQL基础——索引的分类与使用

按逻辑分类:

1、主键索引(聚集索引)(也是唯一索引,不允许有空值)

2、普通索引或单列索引

3、多列索引(复合索引)

4、唯一索引或非唯一索引(非唯一索引其实就是普通/多列索引)

5、空间索引

6、创建索引的基本形式

7、索引的操作

1.查看索引
2.创建单列索引
3.复合索引
4.唯一索引(允许多个空值,每列唯一)
5.主键索引(不允许空值,唯一)
6.索引的删除
7.删除自增auto_increment

 

6.创建索引的基本形式

create [unique|fulltext|spatial] index index_name

[index_type]

  on table_name(index_col_name,...)

[index_option]

[alogorithm_option | lock_option]...

index_colname:

  col_name[(length)][asc | desc]

1.
[unique|fulltext|spatial] 可选参数,分别是唯一索引、全文索引、空间索引
2.index 创建索引的关键字,或者也可以用(key)
3.index_col_name 表中要创建索引的列对象
4.index_name 创建的索引名字
5.length 可选参数,索引的长度,只能用于字符串
6.[asc | desc] 索引值得存储方式

最简单最常用的方式:
  create index 索引名 on 表名(列名);
  create index ix_test101_id on test101(id);
  create index ix_test101_name on test101(name(10)); #截取该字段前10个字符作为索引
  alter table test101 add index 索引名(列名);

7、索引的操作

0.建表时创建索引

  
create table test102(
id int primary key auto_increment,
name varchar(12),
description varchar(200),
index ix_test102_description(description)
);

1.查看索引   show index from table_name; 2.单列索引   create index 索引名 on 表名(列名);   create index ix_test101_id on test101(id);   create index ix_test101_name on test101(name(10)); #截取该字段前10个字符作为索引   alter table test101 add index 索引名(列名); 3.复合索引   create index 索引名 on 表名(列名1,列名2);   alter table test101 add index 索引名(列名1,列名2); 4.唯一索引(允许多个空值,每列唯一)
  create unique index 索引名 on 表名(列名);
  alter table test101 add unique index 索引名(列名);
5.主键索引(不允许空值,唯一)
  alter table test101 add primary key (列名)
  
6.索引的删除   1).单列/多列/唯一索引删除:drop index 索引名 on 表名; or alter table test101 drop
  2).主键索引删除: alter table test101 drop primary key;(如果有自增字段,需要先删除自增)

7.删除自增auto_increment
  alter table test101 change id int;

8.全文索引
  1)全文索引的重要参数
    show variables like '%word%';
    参数 : ft_min_word_len | 4 默认为4:意思是最小分词大小为4个字节
    show variables like 'ngram%';自然语言分词工具
    参数: ngram_token_size | 2  默认为2:意思是分词分2个字,可以设置为1-10个;

  2)创建全文索引
    alter table 表名 add fulltext index 索引名(列名1...) with parse ngram; 
    

  8.全文索引(详情参考:倒排索引

  概念:其实就是倒排索引,把文档分词,然后以词为索引搜索,每个词索引上都包含对应的  <词,文档编号,tf(即出现次数)> ,

  倒排索引长成什么样子呢?就是图中标记的那样,每个词后面有一个拉链,拉链中存放包含该词的文档编号,利用这个数据结构能快速的找到包含某一个词的所有文档。

   

词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

但是, 需要注意, 一些通用的词语对于主题并没有太大的作用, 反倒是一些出现频率较少的词才能够表达文章的主题, 所以单纯使用是TF不合适的。权重的设计必须满足:一个词预测主题的能力越强,权重越大,反之,权重越小。所有统计的文章中,一些词只是在其中很少几篇文章中出现,那么这样的词对文章的主题的作用很大,这些词的权重应该设计的较大。IDF就是在完成这样的工作.

公式:



猜你喜欢

转载自www.cnblogs.com/gered/p/10381282.html