MySQL与PHP的基础与应用专题之索引

概述

从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.

索引

索引 (Index) 是一种特殊的数据结构, 类似于图书的目录. 索引能够极大的提升数据库的查询效率. 如果没有索引, 在查询数据时必须扫描表中的说有记录才能找出符合条件的记录, 这种全表扫描的查询效率非常低.

索引的种类 描述
普通索引 最基本的索引, 没有任何限制, 仅加速查询
唯一索引 索引列的值必须唯一, 但允许有空值
主键索引 一种特殊的唯一索引, 不允许有空值
复合索引 两个或多个列上的索引被称作符合索引
全文索引 对文本内容进行分词索引

格式:

CREATE INDEX 索引名 ON 表名(列名)

查询分析器 EXPLAIN

EXPLAIN 命令可以查看 SQL 语句的执行计划. 当 EXPLAIN 与 SQL 语句一起使用时, MySQL 将显示来自优化器的有关语句执行计划的信息. MySQL 解释了它将如何处理语句, 包括有关如何连接表以及以何种顺序连接表的信息.

查询分析器的用途:

  • 分析出表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询

结果解析:

参数 描述
id 执行 SELECT 或操作表的顺序
select_type 查询的类型, 如 SIMPLE, PRIMARY, SUBQUERY, DERIVED, UNION 等
table 当前行使用的表名
partitions 匹配的分区
type 连接类型
possibile_keys 可能使用的索引
key 实际使用的索引, NULL 表示未使用索引
key_len 查询中使用的索引长度
ref 列与索引的比较
rows 扫描的行数
filtered 选取的行数占扫描的行数的百分比
extra 其他信息

格式:

EXPLAIN SQL 语句

例子:

MySQL 日志

日志 (Log) 用于记录数据库的运行情况, 以及用户对数据库执行的各类操作. 当数据库发生故障时, 可以根据日志分析和解决问题, 从而对数据进行恢复.

日志 描述
重做日志 (Redo Log) 重做日志是一种物理格式的日志, 记录的是物理数据页面修改的信息
回滚日志 (Undo Log) 回滚日志是一种逻辑格式的日志, 在执行 Undo 的时候. 仅仅是将数据从逻辑上恢复至事务之前的状态
二进制日志 (Bin Log) 二进制日志是一种逻辑格式的日志, 以二进制文件的形式记录了数据库中的操作, 但不记录查询语句
错误日志 (Error Log) 错误日志记录着 Mysqld 启动和停止, 以及服务器在运行过程中发生的错误的关信息
慢查询日志 (Slow Query Log) 慢查询日志记录执行时间过长和没有使用索引的查询语句
一般查询日志 (General Log) 记录了服务器收到的每一个查询或是命令, 无论这些查询是命令是否正确甚至是否包含语法错误
中继日志 (Relay Log) 中级日志类似二进制, 可用于复制架构中, 使从服务器和主服务器的数据保持一致

慢查询日志

慢查询日志用于记录 MySQL 数据库中响应时间超过指定阈值的语句. 慢查询日志通常也被称为慢体质, 因为慢查询不仅仅针对 SELECT 语句, 像 INSERT, UPDATE, DELETE 等语句. 只要响应时间超过所设定阈值都会记录在慢查询日志中.

参数 描述
slow_query_log 是否开启慢查询日志, 1 表示开启, 0 表示关闭
slow_query_log_file 慢查询日志存储路径, 可选
long_query_time 阈值, 当 SQL 语句的响应时间超过阈值就会被记录到日志中
log_queries_ not_using_indexes 未使用索引的查询也被记录到慢查询中, 可选
log_output 日志存储方式, 默认为 FILE
log_output=‘FILE’ 表示将日志存入文件
log_output=‘TBALE’ 表示将日志存入数据库
log_output=‘FILE, TABLE’ 表示同时将日志存入文件和数据库

开启慢查询:

set slow_query_log='ON';
set long_query_time=1;

到此这篇关于MySQL与PHP的基础与应用专题之索引的文章就介绍到这了,更多相关MySQL 索引内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何实现MySQL的索引

    MySQL中索引分三类:B+树索引.Hash索引.全文索引.InnoDB存储引擎中用的是B+树索引.要介绍B+树索引,不得不提二叉查找树.平衡二叉树和B树这三种数据结构.B+树是从它们三个演化来的. 二叉查找树: 图中为user表建立了一个二叉查找树的索引.节点中存储了键(key)和数据(data).数据对应user表中的行数据. 如果查找id=12的用户信息,流程如下:1)将根节点作为当前节点,12大于10,将10的右子节点(13节点)作为当前节点.2)12与13比较,将13的左子节点(12节

  • mysql聚集索引、辅助索引、覆盖索引、联合索引的使用

    目录 聚集索引(Clustered Index) 辅助索引(Secondary Index) 覆盖索引(Covering index) 联合索引 <MySQL技术内幕 InnoDB存储引擎>学习笔记 聚集索引(Clustered Index) 聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据. 举个例子,直观感受下聚集索引. 创建表t,并以人为的方式让每个页只能存放两个行记录(不清楚怎么人为控制每页只存放两个行记录): 最后<MySQL技术内幕>

  • MySQL数据库索引以及失效场景详解

    目录 1. MySQL索引概述 1.1 索引的概念 1.2 索引的特点 1.3 索引的分类 1.4 索引的使用场景 2. 索引失效场景 2.1 索引失效9种场景 2.2 索引失效场景总结 3. 索引失效验证 3.1 全值匹配 3.2 最佳左前缀 3.3 索引计算 3.4 索引范围:索引列上不能有范围查询 3.5 索引覆盖:尽量使用覆盖索引 3.6 不等: 使用不等于(!= 或者 <>)的时候 3.7 null:字段的is not null 与is null 3.8 like:like的前后模糊

  • MySQL索引失效之隐式转换的问题

    目录 常见索引失效: 一.常见索引失效场景 1.条件字段函数操作 2.条件字段运算操作 3.隐式类型转换 4.隐式字符编码转换 二.类型转换 1.字符串转整型 2.时间类型转换 常见索引失效: 1. 条件索引字段"不干净":函数操作.运算操作 2. 隐式类型转换:字符串转数值:其他类型转换 3. 隐式字符编码转换:按字符编码数据长度大的方向转换,避免数据截取 一.常见索引失效场景 root@test 10:50 > show create table t_num\G ******

  • MySQL索引事务详细解析

    目录 一.索引 1.概念 2.作用 3.缺陷 4.使用场景 5.使用 1.查看索引 2.创建索引 3.删除索引 6.案例 二.事务 1.为什么使用事务 2.事务的概念 3.使用 4.特性 一.索引 1.概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针,可以对表中的一列或者多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现. (这里对于索引也只是简单了解,写了些皮毛) 更浅显易懂的来说:数据库的数据保存在硬盘,硬盘不知道具体保存在哪个位置,索引就是用来告诉硬盘数据在哪个位置

  • Mysql索引结合explain分析示例

    目录 简介 1.索引分类 聚簇索引 为什么选择B+树 explain 简介 Mysql 在我们项目中使用是非常广的,当我们数据量大的时候,就需要考虑建立索引了,我感觉这也是一种以空间换时间的方式:在我们查询的时候,通过使用索引来提高速度:那么,我们在使用的过程中,怎么判定有没有走索引呢?有一个explain语句来进行分析,根据阿里的Java编程规范,至少类型要提升到range;我那时候就在想为什么要提升到range呢?后来结合Mysql的索引终于知道explain和Mysql底层B+树的对应关系

  • Mysql的复合索引如何生效

    目录 背景 认识复合索引 最左匹配原则 字段顺序的影响 复合索引可以替代单一索引吗? 小结 背景 最近频繁出现慢SQL导致系统性能问题,于是决定针对索引进行一些优化.一些表结构本身已经有了不少索引,如果再继续添加索引,势必会影响到插入数据的性能.那么,是否可以使用组合索引来达到目的呢?这篇文章咱们来一探究竟. 认识复合索引 如果where条件中使用到多个字段,并且需要对多个字段建立索引,此时就可以考虑采用复合索引(组合索引).比如查询地址时需要输入省.市,那么在省.市上建立索引,当数据量大时会明

  • php mysql索引问题

    显然这是一个凡是使用MySQL的朋友都会遇到的问题. 回忆一下当初在配置环境时提到的MySQL GUI工具,对了,就是它,大家可以到http://www.mysql.com中找到它.因为sunec也只是一名程序爱好者,远没有达到程序员水平,所以借助一些工具的帮助还是很有必要的~相信一些朋友也和我一样~ 用GUI工具创建表,建立REF字段,把REF设置为主键,定义类型为int,并在AUTO INC选项上打勾.好了,在MySQL端的工作就结束了. 接下去就交给PHP了,用之前专题中介绍过的inser

  • MySQL与PHP的基础与应用专题之索引

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 索引 索引 (Index) 是一种特殊的数据结构, 类似于图书的目录. 索引能够极大的提升数据库的查询效率. 如果没有索引, 在查询数据时必须扫描表中的说有记录才能找出符合条件的记录, 这种全表扫描的查询效率非常低. 索引的种类 描述 普通索引 最基本的索引, 没有任何限制, 仅加速查询 唯一索引 索引列的值必须唯一, 但允许有空值 主键索引 一种特殊的唯一索引, 不允许有空值 复合索引 两个或多个列上的索引被称作符合索引 全文

  • MySQL与PHP的基础与应用专题之内置函数

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. MySQL 内置函数 MySQL 内置函数可以帮助我们更方便的处理表中的数据, 简化操作. 数学函数: 函数 描述 ABS() 取绝对值 SQRT() 取根号 MOD() 取模 FLOOR() 返回不大于的最大整数值 CELLING() 返回不小于的最小整数值 ROUND() 四舍五入 SIN() 取正弦 COS() 取余弦 字符串函数: 函数 描述 LENGTH() 取字符串长度 LOWER() 将字符串全部转为小写 UPPE

  • MySQL与PHP的基础与应用专题之数据查询

    目录 概述 条件查询 例1 例2 运算符IN 例1 例2 运算符Like 例1 例2 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 条件查询 我们可以使用关键词Where来指定条件, 用于插入, 修改删除或者查询数据. 运算符 描述 = 等于 <> 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 between and 小于等于 and 与, 表示左右两边的条件同时成立 or 或, 表示左右两边只要有一个条件成立 表记录: 例 1 从表

  • MySQL与PHP的基础与应用专题之数据完整性

    目录 概述 数据完整性 实体完整性 域完整性 参照完整性 自定完整性 唯一性 外键 创建主表&从表 插入数据 错误展示 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 数据完整性 数据完整性 (Data Integrity) 指存储在数据库 (Databse) 中的数据, 需要保证一致性和可靠性. 数据完整性可以防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作. 数据完整性包括: 实体完整性: RDBMS 中一行代码表示一个实体. 实体完整性就是保住

  • MySQL与PHP的基础与应用专题之增删改查

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 添加数据 SQL 语句: # 插入单条数据 INSERT INTO 表名 (列名1, 列名2, -) VALUES (值1, 值2, -) # 插入多条数据 INSERT INTO 表名 (列名1, 列名2, -) VALUES (值1, 值2, -) PHP 代码实现: <?php # 创建连接 $conn = mysqli_connect("localhost", "root", &quo

  • MySQL与PHP的基础与应用专题之创建数据库表

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. MySQL 安装 下载地址: https://dev.mysql.com/downloads/windows/installer/ MySQL 命令行 打开 MySQL 命令行: 输入密码: 查看所有数据库: 数据库创建 SQL语句 CREATE DATABASE 数据名称 PHP 代码实现: <?php # 创建链接 $conn = mysqli_connect("localhost", "root&

  • MySQL与PHP的基础与应用专题之数据查询语句

    目录 概述 ORDERBY 例1 例2 LIMIT 例1 例2 GROUPBY 例1 例2 HAVING 例1 例2 GROUP_CONCAT 例1 例2 DISTINCT 例1 例2 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. ORDER BY 在 SQL 中, 我们可以使用 ORDER BY 对查询结果进行一列或多列排序. SQL 语句: SELECT 列名1, 列名2 FROM 表名1, 表名2 ORDER BY 列名, 列名[ASC|DESC] 注意: ASC 表

  • MySQL与PHP的基础与应用专题之表连接

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 表连接 表连接 (JOIN) 是在多个表之间通过连接条件. 使表之间发生关联, 进而能从多个表之间获取数据. 表连接语法: SELECT 表名1.列名, 表名2.列名 FROM 表1, 表2 WHERE 条件 表连接的几种方式: 内连接: join 或者 inner join 自连接: 同一张表内的连接 外连接: 左外连接, left join 右外连接, right join 全外连接, full join 数据 (table

  • MySQL与PHP的基础与应用专题之自连接

    概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 自连接 自连接 (Self Join) 是一种特殊的表连接. 自连接指相互连接的表在物理上同为一张表, 但是逻辑上是多张表. 自连接通常用于表中的数据有层次结构, 如区域表, 菜单表, 商品分类表等. 格式: SELECT A.列名, B.列名 FROM 表A, 表B WHERE A.列名 = B.列名 数据: 例子: (过滤城市) <?php $conn = mysqli_connect("localhost"

  • MySQL与PHP的基础与应用专题之数据控制

    目录 概述 数据控制语言 MySQL权限体系 用户管理 创建用户 删除用户 修改密码 权限管理 查看权限 用户授权 撤销授权 刷新权限 注意事项 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 数据控制语言 数据控制语言 (Data Control Language) 是用来设置或更改数据库用户或角色权限的语句. 层级 描述 全局层级 适用于一个给定服务器中的所有数据库. 这些权限存储在 mysql.user 表中 数据库层级 适用于一个给定数据库中的所有目标. 这些权限存储

随机推荐