索引的创建、查看、删除

这篇具有很好参考价值的文章主要介绍了索引的创建、查看、删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 索引分类

  • 功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
  • 按照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。
  • 按照作用字段个数进行划分,分成单列索引和联合索引。
  1. 普通索引

在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创建在任何数据类型中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索引以后,可以通过索引进行查询。例如,在表student的字段name上建立一个普通索引,查询记录时就可以根据该索引进行查询

  1. 唯一性索引

使用UNIQUE参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引作用的列值必须是唯一的,但允许有空值。在一张数据表里可以有多个唯一索引。例如,在表student的字段email中创建唯一性索引,那么字段email的值就必须是唯一的。通过唯一性索引,可以更快速地确定某条记录

  1. 主键索刭

主键索引就是一种特殊的唯一性索引,在唯一索引的基础上增加了不为空的约束,也就是NOT NULL+UNIQUE,张表里最多只有一个主键索引。这是由主键索引的物理实现方式决定的,因为数据存储在文件中只能按照一种顺序进行存储。InnoDB主键索引就是聚簇索引

  1. 单列索引

在表中的单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。一个表可以有多个单列索引。

  1. 多列(组合、联合)索引

多列索引是在表的多个字段组合上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询,但是只有查询条件中使用了这些字段中的第一个字段时才会被使用。例如,在表中的字段id、name和gender上建立一个多列索引idx_id_name_gender,只有在查询条件中使用了字段id时该索引才会被使用。使用组合索引时遵循最左前缀集合。

  1. 全文索引

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。全文索引非常适合大型数据集,对于小的数据集,它的用处比较小。

使用参数FULLTEXT可以设置索引为全文索引。在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引只能创建在CHAR、VARCHAR 或TEXT类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。例如,表student的字段information是TEXT类型该字段包含了很多文字信息。在字段information上建立全文索引后,可以提高查询字段information的速度。全文索引典型的有两种类型:自然语言的全文索引和布尔全文索引。

自然语言搜索引擎将计算每一个文档对象和查询的相关度。这里,相关度是基于匹配的关键词的个数,以及关键词在文档中出现的次数。在整个索引中出现次数越少的词语,匹配时的相关度就越高。相反,非常常见的单词将不会被搜索,如果一个词语的在超过50%的记录中都出现了,那么自然语言的搜索将不会搜索这类词语。

索引常用命令

# 查看该表索引
SHOW INDEX FROM student 

2. 索引创建

# [UNIQUE | FULLTEXT | SPATIAL]为指定创建索引类型
# [INDEX | KEY]为创建索引关键字,两个都可以
# 列名 [length],varchar类型的属性,可以指定索引作用的长度,比如只作用在前20个字符
CREATE TABLE 表名([col_name data_type] 
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [索引名] (列名 [length]) [ASC | DESC]
);
  • UNIQUEFULLTEXTSPATIAL为可选参数,分别表示唯一索引、全文索引和空间索引;
  • INDEXKEY为同义词,两者的作用相同,用来指定创建索引;
  • index_name指定索引的名称,为可选参数,如果不指定,那么MySQL默认col_name为索引名;
  • col_name为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;
  • length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;
  • ASCDESC指定升序或者降序的索引值存储。

2.1 创建表的时候创建索引(隐式创建)

# 在声明有主键约束、唯一性约束、外键约束的字段上,会自动的添加相关的索引
CREATE TABLE dept(
dept_id INT PRIMARY KEY AUTO_INCREMENT, # 主键约束
dept_name VARCHAR(20)
);
CREATE TABLE emp(
emp_id INT PRIMARY KEY AUTO_INCREMENT, # 主键约束
emp_name VARCHAR(20) UNIQUE, # 唯一性约束
dept_id INT, # 外键约束
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
);

2.2 显示创建

1.普通索引

CREATE TABLE book( 
    book_id INT , 
    book_name VARCHAR(100), 
    authors VARCHAR(100), 
    info VARCHAR(100) , 
    comment VARCHAR(100), 
    year_publication YEAR, 
    INDEX idx_yp(year_publication) 
);

索引的创建、查看、删除

2.唯一索引

CREATE TABLE test1( 
    id INT NOT NULL, 
    name varchar(30) NOT NULL, 
    UNIQUE INDEX uk_idx_id(id) 
);

索引的创建、查看、删除

3.主键索引

# 由主动约束去让主键索引自动创建
CREATE TABLE student ( 
    id INT(10) UNSIGNED AUTO_INCREMENT, 
    student_no VARCHAR(200),
    student_name VARCHAR(200), 
    PRIMARY KEY(id) 
);

索引的创建、查看、删除

删除主键索引
# 删除主键索引,主键设置自增删除会出错
ALTER TABLE student drop PRIMARY KEY ;

4.单列索引

# single_idx_name为索引名
CREATE TABLE test2( 
    id INT NOT NULL, 
    name CHAR(50) NULL, 
    INDEX single_idx_name(name(20)) 
);

5.组合索引

CREATE TABLE test3(
	id INT(11) NOT NULL,
	name CHAR(30) NOT NULL,
	age INT(11) NOT NULL,
	info VARCHAR(255),
	INDEX multi_idx(id,name,age)
);

索引的创建、查看、删除

6.全文索引

CREATE TABLE articles (
	id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	title VARCHAR (200),
	body TEXT,
	FULLTEXT index (title, body)
) ENGINE = INNODB ;

索引的创建、查看、删除

创建了一个给title和body字段添加全文索引的表。在MySQL5.7及之后版本中可以不指定最后的ENGINE了,因为在此版本中InnoDB支持全文索引。不同于like方式的的查询,全文索引用match+against方式查询:

索引的创建、查看、删除

SELECT * FROM articles WHERE MATCH(title, body) AGAINST ('phone');

2.3 在已经存在的表上创建索引

  1. 使用ALTER TABLE语句创建索引 ALTER TABLE语句创建索引的基本语法如下:
ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY]
[index_name] (col_name[length],...) [ASC | DESC]
  1. 使用CREATE INDEX创建索引 CREATE INDEX语句可以在已经存在的表上添加索引,在MySQL中,
    CREATE INDEX被映射到一个ALTER TABLE语句上,基本语法结构为:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
ON table_name (col_name[length],...) [ASC | DESC]

3. 删除索引

  1. 使用ALTER TABLE删除索引 ALTER TABLE删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;
  1. 使用DROP INDEX语句删除索引 DROP INDEX删除索引的基本语法格式如下:
DROP INDEX index_name ON table_name;

提示 删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成
索引的所有列都被删除,则整个索引将被删除。文章来源地址https://www.toymoban.com/news/detail-467432.html

到了这里,关于索引的创建、查看、删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES 查看、删除索引命令

    1 、获取 cat命令 列表: 2 、带用户名密码查看索引信息 3、 查看索引信息及空间占用: 4、清理指定索引空间 5、 删除索引 6、删除30天前的索引记录 7、crontab 定时清理30天前数据 8、修改带密码的索引副本数量  

    2024年02月09日
    浏览(48)
  • elasticsearch索引操作,索引创建、索引更新、索引删除

    创建索引 更新索引,添加字段 注意更新索引时与创建索引大致一样,只是更新索引时候的url不同,需要在后面加一个 _mapping 路径,同时请求的json里面不需要 mappings 路径,只需要 properties 即可 更新索引,修改配置 同理在更新setting的时候和更新maping的时候一样 获取索引结构

    2024年02月11日
    浏览(42)
  • LVM逻辑卷管理(创建,删除)

    LVM(Logical Volume Manager);逻辑卷管理技术 ,是一种让磁盘分区更加灵活和高效的软件。它的原理就像是在磁盘和文件系统之间加了一层管理工具,可以将多个物理磁盘分区组合成一个或多个虚拟磁盘,再将这些虚拟磁盘分配给文件系统使用。这样可以方便地动态调整磁盘空

    2024年02月02日
    浏览(40)
  • MySql索引分类及创建索引的相关语法

    1.1 InnoDB中索引的分类 聚集索引与二级索引之间的B+树的结构 sql语句索引执行的过程讲解 根据id查询的聚集索引效率要比二级索引高,故第一条sql的执行效率要高于第二条sql的执行效率。 如果一个索引只关联一个字段,这种索引称为单列索引,如果一个索引关联了多个字段,

    2024年02月16日
    浏览(38)
  • 【SQL应知应会】索引(三)• MySQL版:聚簇索引与非聚簇索引;查看索引与删除索引;索引方法

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏, 本专栏 主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle ✅今天继续 SQL的索引 的第 3 篇文章,主要讲到了聚簇索引与非聚簇索引、查

    2024年02月11日
    浏览(41)
  • 索引创建、删除的sql语句

    目录 常用的索引类型 创建索引 使用ALTER TABLE 语句创建索引    使用CREATE TABLE 语句创建索引 删除索引 使用ALTER TABLE 语句删除索引 使用DROP INDEX 语句删除索引 1,普通索引:普通索引是最基本的索引,它没有任何限制,值可以为空;仅加速查询。 2,唯一索引:唯一索引与普

    2023年04月27日
    浏览(45)
  • ES(Kibana)索引拷贝/查看配置信息/查看字段信息/添加新字段/创建索引视图

    kibana - Management - Index Patterns - Create index pattern - 输入索引名称(注意这里的*号为匹配符,若确定某个具体的索引请删除) - Next step - Time Filter field name(选择是否使用时间选择器) - Create index Pattern -完成(在Discover中可查看此视图)

    2024年02月16日
    浏览(56)
  • 利用JavaRestClient实现创建、删除索引库,判断索引库是否存在

    在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连接。 1)引入es的RestHighLevelClient依赖: 注:导入的依赖的版本要和打开的es的版本对应  2)初始化RestHighLevelClient:    把建库的json封

    2024年02月11日
    浏览(63)
  • ElasticSearch-索引和文档的创建修改删除

    目录 一、创建索引 二、查看索引 三、索引是否存在 四、删除索引 五、创建文档 六、查看文档 七、更新文档 八、文档是否存在 九、删除文档 结果: 语法: GET 索引名称  从这两个索引信息来看,es_db2是标准分词器的索引,es_db3是ik分词器索引。 语法:HEAD 索引名称    在

    2024年01月19日
    浏览(41)
  • Elasticsearch如何创建索引,添加,删除,更新文档

    了解es基本概念:elasticsearch(es)背景故事与基本概念 安装es:Linux安装Elasticsearch详细教程 安装kibana:Linux安装Kibana详细教程 熟悉Json 熟悉REST接口 检查 es 及 Kibana 是否运行正常 创建一个名为 twitter 的索引(index),并插入一个文档(document) 在关系型数据库中,需要使用DDL语

    2023年04月08日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包