首页 > 数据库 >Mysql 索引

Mysql 索引

时间:2024-07-06 11:19:27浏览次数:29  
标签:last name students 索引 Mysql -- id

 在 MySQL 中,索引是一种数据结构,它能够帮助快速查找和检索表中的记录,从而提高查询性能。索引在数据库中类似于书籍的目录,可以快速定位到所需的内容。下面是关于 MySQL 索引的详细介绍,包括其概念、类型、如何使用以及如何在建表时指定索引。

什么是索引

索引是存储在数据库中的一种结构,用于加速数据检索。它可以减少查询扫描的数据量,从而提高查询效率。索引通常基于某些列(一个或多个列),这些列被称为索引键(index key)。

索引的类型

MySQL 支持多种类型的索引,主要包括:

  1. PRIMARY KEY 索引:主键索引,表中每行数据的唯一标识,不能有重复值,也不能为 NULL。一个表只能有一个主键。
  2. UNIQUE 索引:唯一索引,保证列中的所有值都是唯一的,可以有 NULL 值。
  3. INDEX(普通索引):普通索引,能够加速数据检索,没有唯一性要求。
  4. FULLTEXT 索引:全文索引,主要用于全文检索,在大文本字段(如 CHAR, VARCHAR, TEXT)上使用。
  5. SPATIAL 索引:空间索引,主要用于地理空间数据类型(如 POINT, LINESTRING, POLYGON)。

 

假设的学生表结构

我们有一个名为 students 的表,包含以下列:

  • student_id:学生 ID,主键
  • first_name:名
  • last_name:姓
  • email:电子邮件
  • date_of_birth:出生日期
  • class_id:班级 ID
  • enrollment_date:入学日期

创建表并指定索引

在创建表时,可以同时指定各种类型的索引:

CREATE TABLE students (
  student_id INT AUTO_INCREMENT,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  email VARCHAR(100),
  date_of_birth DATE,
  class_id INT,
  enrollment_date DATE,
  PRIMARY KEY (student_id),                  -- 主键索引
  UNIQUE (email),                            -- 唯一索引
  INDEX idx_last_name (last_name),           -- 普通索引
  INDEX idx_class_enrollment (class_id, enrollment_date),  -- 组合索引
  FULLTEXT (first_name, last_name)           -- 全文索引
);

在已有表上添加索引

假设我们已经有一个学生表,但没有索引。我们可以使用 ALTER TABLE 语句添加索引:

ALTER TABLE students ADD PRIMARY KEY (student_id);         -- 添加主键索引
ALTER TABLE students ADD UNIQUE (email);                   -- 添加唯一索引
ALTER TABLE students ADD INDEX idx_last_name (last_name);  -- 添加普通索引
ALTER TABLE students ADD INDEX idx_class_enrollment (class_id, enrollment_date);  -- 添加组合索引
ALTER TABLE students ADD FULLTEXT (first_name, last_name); -- 添加全文索引

索引的使用场景

1. 主键索引

主键索引是表中每行记录的唯一标识,通常用于唯一标识每个学生。在 students 表中,student_id 是主键索引:

SELECT * FROM students WHERE student_id = 123;

2. 唯一索引

唯一索引保证列中的所有值都是唯一的,可以用于防止重复数据。在 students 表中,email 列是唯一索引:

SELECT * FROM students WHERE email = '[email protected]';

3. 普通索引

普通索引用于加速查询,在 students 表中,last_name 列是普通索引,可以加速按姓氏查询的操作:

SELECT * FROM students WHERE last_name = 'Smith';

4. 组合索引

组合索引用于加速涉及多个列的查询。在 students 表中,class_idenrollment_date 组合索引可以加速按班级和入学日期查询的操作:

SELECT * FROM students WHERE class_id = 10 AND enrollment_date = '2022-09-01';

5. 全文索引

全文索引用于加速文本字段的全文检索。在 students 表中,first_namelast_name 列的全文索引可以加速名字和姓氏的全文检索:

SELECT * FROM students WHERE MATCH(first_name, last_name) AGAINST ('John Smith');

 

标签:last,name,students,索引,Mysql,--,id
From: https://www.cnblogs.com/rtnb/p/18287025

相关文章

  • Mysql 8.4 安装(Centos7.9)
    前置准备root环境下执行#关闭selinuxvi/etc/selinux/config#SELINUX=enforcing=>SELINUX=disabled#开通防火墙3306/tcpfirewall-cmd--permanent--add-port=3306/tcp下载链接获取https://dev.mysql.com/downloads/file/?id=529414下载&安装下载mkdir-p......
  • mysql 模糊查询
     _表示单个字符SELECT*FROMemployeesWHEREfirst_nameLIKE"___e%";SELECT*FROMemployeesWHEREfirst_nameLIKE"____";查询以J开头,a结尾SELECT*FROMemployeesWHEREfirst_nameLIKE"J%";SELECT*FROMemployeesWHEREfirst_name......
  • linux下mysql安装、授权、创建用户、连接navicat、连接entity
    1.linux下安装mysql:sudoapt-getupdatesudoapt-getinstallmysql-serversudosystemctlstartmysqlsudomysql_secure_installation#这一步不是必须的,甚至有害的2.授权usemysql;updateusersethost='%'whereuser='root';flushprivileges;grantall......
  • MySQL 字符串日期格式转换
    在MySQL中,经常需要将字符串类型的日期转换成日期或时间类型,或者在不同的日期格式之间进行转换。MySQL提供了几种方法来实现这一点,包括使用STR_TO_DATE()和DATE_FORMAT()函数。1.使用STR_TO_DATE()函数STR_TO_DATE()函数可以将字符串转换成日期或时间格式。它接受两个主要参......
  • 八股文 | MySQL 一棵B+树可以存多少数据?
    ......
  • MySQL主从复制详解
    MySQL主从复制详解MySQL主从复制是数据库环境中常用的一种数据同步技术,用于实现数据的高可用性和负载均衡。通过主从复制,可以将一个MySQL数据库服务器的数据实时地复制到一个或多个从库中。本文将介绍MySQL主从复制的原理、配置步骤和常见问题。一、MySQL主从复制的原理M......
  • Springboot+Shiro+Mybatis+mysql实现权限安全认证
    Shiro是Apache的一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。Shiro主要分为两个部分就是认证和授权两部分一、介绍Subject代表了当前用户的安全操作SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组......
  • Mysql中常用函数的使用示例
    场景基础知识回顾:mysql中常用函数的使用示例。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现数学函数--ABS(x)返回x的绝对值SELECTABS(-1),ABS(2);--PI()返回圆周率SELECTPI();--SQRT(x)返回非负数x的二次方根SELECTSQRT(4);--MOD(x,y)返回x被y除之后的余......
  • 本地Windows10怎样配置免安装版本MySQL?
    下载MySQL免安装压缩包下载地址:https://downloads.mysql.com/archives/community/解压安装1、接下来我们解压文件夹,这时我们解压的文件夹是没有my.ini文件和data目录,这时我们需要自己创建my.ini文件,data文件后期回自动生成2、新建配置my.ini文件,并添加配置信息,如下:[mysqld]#......
  • 在windows中把mysql8.0.3设置为允许外部ip访问
    在windows中把mysql8.0.3设置为允许外部ip访问要在Windows系统中设置MySQL8.0.3允许外部IP访问,你需要按照以下步骤操作:登录到MySQL首先,你需要使用管理员账号登录到MySQL:mysql-uroot-p输入密码后,你将进入MySQL命令行界面。2.更新用户权限接下来,你需要更新......