首页 > 数据库 >MySQL教程 - 索引(Index)

MySQL教程 - 索引(Index)

时间:2022-09-02 08:58:16浏览次数:59  
标签:INDEX 教程 Index 表名 唯一 索引 MySQL UNIQUE

更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。

索引

说明

是一种对数据表的一列或多列进行排序的数据结构

索引是单独的、存储在磁盘上的数据库结构

索引包含对表中记录的指针

索引的作用

提高查询速度

索引的缺点

占用磁盘空间、DML操作插入和更新速度减慢,随着数据增加越明显

索引与表

每个表支持16个索引,最小长度为256字节

索引与存储引擎

MySQL中索引的内部存储类型有 B-Tree 和 HashTable

InnoDB、MyISAM引擎只支持B-Tree

Memory引擎默认为HashTable,支持两种类型

索引分类

普通索引

普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值

唯一索引

索引列的值必须要唯一,但允许有空值

主键是一种特殊的唯一索引,不可以为空

使用UNIQUE关键字定义唯一索引

主键索引

是一种特殊的唯一索引,不允许有空值,一张表只能有一个

组合索引

在表的多个字段组合上创建的索引

只有在查询条件中使用了这些字段左边的字段时索引才会被使用

索引列的组合必须唯一

单列索引

单个列上的索引

全文索引

支持在文本中全文查找值

只可以在CAHR、VARCHAR、TEXT类型上使用

只有MyISAM支持

允许在这些索引列中插入重复值和空值

只有MyISAM支持

空间索引

MySQL在5.7之后版本支持空间索引,而且支持OpenGIS几何数据模型

只有MyISAM支持

对空间数据类型字段建立索引

空间数据类型有4中,分别是,geometry,point,linesteing和polygon.

使用spatial关键字进行扩展

必须将其声明为not null

使用索引注意

索引不是越多越好

经常查询的表可以使用索引

避免对经常更新的表进行过多的索引

数据量小的表可以不用索引

在表达式中经常用到的不同值较多的字段建立索引

在频繁排序或分组的字段上建立索引

创建常规索引

CREATE TABLE table_name
(
    [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
    (字段 [(索引长度)] [ASC | DESC],...)
);

或者

ALTER TABLE 表名
ADD [UNIQUE | FULLTEXT | SPATIAL ]  INDEX <索引名>
(列名.. [(索引长度)] [ASC | DESC]);

或者

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
ON 表名(字段 [(索引长度)] [ASC | DESC],...);

创建唯一索引

CREATE UNIQUE INDEX user_index
ON user (id);

删除索引

ALTER TABLE 表名 DROP INDEX <索引名>;

或者

DROP INDEX <索引名> ON 表名;

删除主键索引

ALTER TABLE <表名> DROP PRIMARY KEY;

查看索引

SHOW INDEX FROM 表名;

查询结果解释:

字段名 解释
table 表示创建索引的表
non_unique 表示索引非唯一 1代表是非唯一索引 0代表唯一索引
key_name 表示索引名称
seq_in_index 字段在索引的位置
column_name 表示定义索引的列字段
sub_part 表示索引的长度
null 表示该字段是否能为空值
index_type 表示索引类型

标签:INDEX,教程,Index,表名,唯一,索引,MySQL,UNIQUE
From: https://www.cnblogs.com/cqpanda/p/16648542.html

相关文章

  • MySQL教程 - DQL操作
    更新记录转载请注明出处。2022年9月2日发布。2022年9月2日从笔记迁移到博客。基本查询SELECT属性列表FROM表或视图WHERE筛选条件1GROUPBY属性[HAVIN......
  • MySQL教程 - DML操作
    更新记录转载请注明出处。2022年9月2日发布。2022年9月2日从笔记迁移到博客。删除DELETEFROM表WHERE条件;清空TRUNCATETABLE表;DELETE和TRUNCATE对......
  • 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者,再识AutoRe
    1.简介上一篇宏哥主要讲解的一些在电脑端的操作和应用,今天宏哥讲解和分享一下,在移动端的操作和应用。其实移动端和PC端都是一样的操作,按照宏哥前边抓取移动端包设置好,就可......
  • Tailwind 教程 — 使用 Tailwind CSS 为初学者创建一个注册页面
    Tailwind教程—使用TailwindCSS为初学者创建一个注册页面在本教程中,我将向您展示如何使用TailwindCSS设计注册页面。我将确保注册页面易于使用且访问者可以快速......
  • Java-JDBC和mysql的使用
    1.MySqlJDBC(JavaDataBaseConnection)是通过JAVA访问数据库,需要对数据库有基本的理解和应用。MySql作为常见的数据库,在中小型网站经常被使用;其中包含了mysql服务器......
  • clickhouse高级功能之MaterializeMySQL 踩坑
    MaterializeMySQL 简介MySQL的用户群体很大,为了能够增强数据的实时性,很多解决方案会利用binlog将数据写入到ClickHouse。为了能够监听binlog事件,我们需要用到类似......
  • 7.2 zabbix实现Mysql的监控
    7.2zabbix实现Mysql的监控监控MySQL连接数、主从同步、同步延迟等。一:实现MySQL主从1.1:MySQLMastermysql-server-5.7.xx:vim/etc/mysql/mysql.conf.d/mysqld.cnf[......
  • 使用 Vite 搭建一个 Vue 3 UI 组件库的手把手教程 All In One
    使用Vite搭建一个Vue3UI组件库的手把手教程AllInOneelement-pluselement-uiforvue3.xversionhttps://github.com/element-plus/element-plushttps://el......
  • Grafana安装配置和简单图标实现(使用MySQL数据源)
    grafana介绍Grafana是一个开源的度量分析与可视化套件,纯JavaScript开发的前端工具,通过访问库(如InfluxDB),展示自定义报表、显示图表等。它的UI十分灵活,有丰富的插件和模板,功......
  • MySQL保留字
    {"action","add","aggregate","all","alter","after","and","as","asc","avg","avg_row_length","auto_increment","between",......