初识MySQL索引

本文深入解析MySQL中的单列索引和组合索引,包括主键索引、唯一索引、普通索引及全文索引的创建与使用场景,探讨索引的底层实现,并详细介绍组合索引的创建语法和生效条件。

MySQL索引分为单列索引和多列索引

一、单列索引:普通索引,主键索引,唯一索引,全文索引

       1.索引分类:

          主键索引:列值唯一,值中不能有null,一张表只能创建一个

          唯一索引:列值唯一,值中可以有null

          普通索引:普通的索引

          全文索引:仅存在于MyISAM引擎

      2.通过创建添加索引

          主键索引:创建时指定primary key  /  修改时使用alter table user add primary key(id)

          唯一索引:create unique index_unique on user(ordertime)

          普通索引:create index index_putong on user(total)

          全文索引:create fulltext index index_fulltext on user(goods_detail)

     3.通过修改添加索引(略,同步骤2)

     4.创建表的时候添加索引(略,同步骤2)

     5.索引的底层实现(暂缓,有时间再研究)

          主键索引底层实现是BTREE

          唯一索引底层实现是BTREE

          普通索引底层实现是BTREE

          全文索引底层实现是FULLTEXT

//唯一索引底层实现是Hash,仅支持memory存储引擎

 

 二、组合索引:

      1.创建语法

          create index index_name on table_name(column1_name,column2_name);

      2.使用场景

          业务的查询往往会用到比较多的查询条件,比如在orders表中会使用到ordertime、total、address字段,那么我们为了提高查询效率,创建这三个字段的索引。

          当我们创建ordertime、total、address三个字段的索引的时候,其实创建了三个索引,分别是ordertime,total,address三个字段的索引,如下图。

      3.组合索引生效场景

          当我们将以上三个字段创建为组合索引之后,以下条件是会使用到组合索引的。

          (1).包含有ordertime的条件。

          对,你没有看错,有且仅有包含ordertime的查询条件才会生效。这是因为MySQL的最左策略。也就是说,如果创建组合索引的顺序是total、ordertime、address,那么有且仅有包含total的查询条件才使用到该索引。

参考地址:https://blog.youkuaiyun.com/b1303110335/article/details/81976289

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
<think>好的,我现在需要帮助用户了解MySQL的基础知识或入门指南。用户明确提到了想了解基础概念和入门教程,所以我应该围绕这个主题展开。首先,我需要确保自己准确理解MySQL的基本概念,比如它是什么类型的数据库,有什么特点,以及核心组件有哪些。根据用户提供的引用内容,MySQL是一个开源的关系型数据库管理系统,使用SQL进行管理,属于Oracle旗下产品,并且在WEB应用方面非常流行。这些信息可以作为回答的基础。我需要将这些信息组织成结构清晰的段落,符合用户要求的格式,比如分点说明,使用中文,并且正确应用LaTeX格式的数学表达式(虽然这里可能用不上,但要注意如果有变量或公式的话)。接下来,我需要考虑用户可能的需求。用户是初学者,可能需要最基础的介绍,比如数据库的定义、表、字段、主键、外键、索引等概念。同时,用户可能还希望了解如何开始使用MySQL,比如安装步骤、基本命令等。不过用户的问题主要集中在基础概念上,所以应该先详细解释这些概念,再简要提到入门操作步骤。另外,用户要求生成相关问题。我需要根据回答内容,提出几个相关的问题,帮助用户进一步学习。比如关于SQL语言、安装配置、常用命令、主键作用等。这些问题应该与回答内容紧密相关,并且能够引导用户深入学习。 在组织回答结构时,应该按照逻辑顺序,从MySQL的概述开始,然后介绍核心概念,接着是基本操作步骤,最后是相关问题和引用。需要确保每个部分简洁明了,避免使用过于专业的术语,或者如果使用了,要加以解释。同时,要注意引用用户提供的参考资料,比如引用[1]和引用[2],在适当的位置添加引用标识。例如,在提到MySQL是开源的时候,可以引用[^1];在提到其流行性时引用[^2]。但要注意不要过度引用,保持自然。最后,检查是否符合所有系统级指令:使用正确的中文,LaTeX格式(如果有的话),分点清晰,相关问题生成合理,引用正确。确保没有使用任何Markdown格式,代码块用正确的符号包裹,并且回答真实可靠。</think>### MySQL 基础知识与入门指南 #### 一、MySQL 概述 MySQL 是一种**开源关系型数据库管理系统(RDBMS)**,使用结构化查询语言(SQL)进行数据管理[^1]。它由瑞典 MySQL AB 公司开发,现属于 Oracle 旗下产品,广泛应用于 WEB 开发、企业级应用等领域[^2]。 #### 二、核心概念 1. **数据库(Database)** 存储数据的逻辑容器,例如一个电商系统可能包含 `user_db`(用户数据库)和 `order_db`(订单数据库)。 2. **表(Table)** 数据的结构化集合,由行(记录)和列(字段)组成。例如用户表可定义为: ```sql CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ); ``` 3. **字段(Column)** 表的属性,如 `users` 表中的 `id`、`name`、`email`,每个字段需定义数据类型(如 `INT`、`VARCHAR`)。 4. **主键(Primary Key)** 唯一标识表中每条记录的字段,如 `id INT PRIMARY KEY`。主键不允许重复且不可为空。 5. **外键(Foreign Key)** 用于关联两个表的字段。例如订单表中的 `user_id` 可关联到用户表的 `id`: ```sql CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) ); ``` 6. **索引(Index)** 加速数据检索的数据结构。例如为 `email` 字段创建索引: ```sql CREATE INDEX idx_email ON users(email); ``` #### 三、入门操作步骤 1. **安装与配置** - 下载安装包([官网](https://www.mysql.com/)) - 运行安装向导,设置 root 用户密码 - 配置环境变量(可选) 2. **连接数据库** 通过命令行或工具(如 MySQL Workbench)登录: ```bash mysql -u root -p ``` 3. **基本操作示例** ```sql -- 创建数据库 CREATE DATABASE test_db; USE test_db; -- 创建表 CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50), hire_date DATE ); -- 插入数据 INSERT INTO employees VALUES (1, '张三', '2023-01-01'); -- 查询数据 SELECT * FROM employees WHERE emp_id = 1; ``` #### 四、MySQL 的特点 1. **开源免费**:社区版可免费使用[^1] 2. **跨平台**:支持 Windows、Linux、macOS 3. **高性能**:优化查询引擎与存储机制 4. **安全性**:提供权限管理与数据加密
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值