MySQL与PHP的基础与应用专题之索引
程序员文章站
2024-03-26 15:13:35
概述从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.索引索引 (index) 是一种特殊的数据结构, 类似于图书的目录. 索引能够极大的提升数据库的查询效率. 如果没有索引, 在查询数据时...
概述
从今天开始, 小白我将带领大家一起来补充一下 数据库的知识.
索引
索引 (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 索引内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
MySQL与PHP的基础与应用专题之索引
-
MySQL与PHP的基础与应用专题之数据控制
-
MySQL中主键索引与聚焦索引之概念的学习教程
-
MySQL中主键索引与聚焦索引之概念的学习教程
-
PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别,print_rvar_dump
-
MySQL与PHP的基础与应用专题之自连接
-
MySQL与PHP的基础与应用专题之自连接
-
PHP基础复习之echo print printf sprintf print_r var_dump的用法与区别
-
数据库 | MySQL调优之索引:索引的失效与优化
-
PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别,print_rvar_dump