当前位置: 首页 > wzjs >正文

php网站开发工程师招聘网参考消息网国内新闻

php网站开发工程师招聘网,参考消息网国内新闻,网页设计与网页制作实训总结,北京朝阳区居家办公MySQL 索引与事务详解 一、索引(Index) 1. 索引的作用与原理 索引是数据库的"目录",能够大幅提高查询速度,但会增加写入开销。MySQL 使用 BTree 作为主要索引结构。 2. 索引类型 (1) 普通索引 CREATE INDEX idx_n…

MySQL 索引与事务详解

一、索引(Index)

1. 索引的作用与原理

索引是数据库的"目录",能够大幅提高查询速度,但会增加写入开销。MySQL 使用 B+Tree 作为主要索引结构。

2. 索引类型

(1) 普通索引
CREATE INDEX idx_name ON users(name);  -- 创建
DROP INDEX idx_name ON users;         -- 删除
(2) 唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);
(3) 主键索引(自动创建)
ALTER TABLE users ADD PRIMARY KEY(id);
(4) 复合索引(最左前缀原则)
CREATE INDEX idx_name_age ON users(name, age);
-- 能使用索引的情况:
-- WHERE name = '张三'
-- WHERE name = '张三' AND age = 25
-- WHERE name LIKE '张%'
-- 不能使用索引的情况:
-- WHERE age = 25
-- WHERE age = 25 AND name = '张三'

3. 索引优化技巧

  • 为 WHERE、JOIN、ORDER BY 涉及的列创建索引
  • 避免过度索引(每个索引占用存储空间并影响写入性能)
  • 使用 EXPLAIN 分析查询:
EXPLAIN SELECT * FROM users WHERE name = '张三';

4. 索引失效的常见情况

  • 使用 !=NOT INIS NULLIS NOT NULL
  • 对索引列使用函数:WHERE YEAR(create_time) = 2023
  • 类型转换:WHERE name = 123(name 是字符串类型)
  • 模糊查询以通配符开头:WHERE name LIKE '%三'

二、事务(Transaction)

1. 事务的特性(ACID)

  • 原子性(Atomicity):事务是不可分割的工作单位
  • 一致性(Consistency):事务执行前后数据库保持一致状态
  • 隔离性(Isolation):事务之间互不干扰
  • 持久性(Durability):事务提交后永久生效

2. 事务基本操作

START TRANSACTION;  -- 或 BEGIN
-- 执行SQL语句
INSERT INTO orders(user_id, amount) VALUES(1, 100);
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
COMMIT;  -- 提交
-- 或 ROLLBACK;  -- 回滚

3. 事务隔离级别

隔离级别脏读不可重复读幻读说明
READ UNCOMMITTED性能最高,安全性最低
READ COMMITTED×Oracle默认级别
REPEATABLE READ××MySQL默认级别
SERIALIZABLE×××安全性最高,性能最低

查看和设置隔离级别:

SELECT @@transaction_isolation;  -- 查看当前隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;  -- 设置隔离级别

4. 事务中的常见问题

(1) 脏读(Dirty Read)

事务A读取了事务B未提交的数据

(2) 不可重复读(Non-repeatable Read)

事务A多次读取同一数据,期间事务B修改了该数据,导致事务A读取结果不一致

(3) 幻读(Phantom Read)

事务A读取某个范围的数据,期间事务B插入了新数据,事务A再次读取时出现"幻行"

5. 事务最佳实践

  • 尽量缩短事务执行时间
  • 避免在事务中进行远程调用或耗时操作
  • 合理设置隔离级别(通常使用默认的 REPEATABLE READ)
  • 处理死锁:
-- 查看最近死锁信息
SHOW ENGINE INNODB STATUS;

三、索引与事务的实际应用示例

-- 创建带索引的表
CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,amount DECIMAL(10,2) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,INDEX idx_user_id (user_id),INDEX idx_created_at (created_at)
);-- 事务操作:下单并扣款
START TRANSACTION;INSERT INTO orders (user_id, amount) VALUES (1, 99.99);
UPDATE accounts SET balance = balance - 99.99 WHERE user_id = 1;-- 检查余额是否足够
SELECT balance FROM accounts WHERE user_id = 1 FOR UPDATE;-- 如果余额足够则提交,否则回滚
COMMIT;
-- 或 ROLLBACK;

四、高级话题

1. 覆盖索引

查询的列都包含在索引中,无需回表查询

CREATE INDEX idx_covering ON users(name, age);
SELECT name, age FROM users WHERE name = '张三';  -- 使用覆盖索引

2. 行锁、表锁与间隙锁

  • InnoDB 默认使用行锁
  • 某些情况会升级为表锁(如无索引更新)
  • 间隙锁防止幻读(在 REPEATABLE READ 级别下)

3. 保存点(Savepoint)

START TRANSACTION;
-- 操作1
SAVEPOINT sp1;
-- 操作2
ROLLBACK TO sp1;  -- 回滚到保存点
COMMIT;

掌握索引和事务是 MySQL 高效使用的关键,合理运用可以大幅提升应用性能和可靠性。

http://www.dtcms.com/wzjs/573034.html

相关文章:

  • 建设银行信用卡账网站连云港建设部网站
  • 搭建网站的方案软件技术岗位有哪些
  • 好的网站怎么设计师东莞网站建设培训学校
  • 网站设计模版免费建站报喜鸟集团有限公司网页制作
  • 公司网站设计模板网站源码上传
  • 网站优化排名教程博客园 wordpress
  • php网站开发遇到的问题seo是什么意思如何实现
  • 河北省建设局网站材料备案阿里云官网入口
  • 郑州公司建设网站外贸网站优化在线推广
  • 酒店网站模板设计方案淘宝运营课程
  • 中建南方建设集团官方网站福州网站制作设计
  • 免费开源的个人网站系统网站运作模式
  • 网站架构软件全屏网站模板制作教程
  • 网站验证码系统免费的网站app下载
  • 怎么创网站企业推广是做什么的
  • 广东东莞新增本土确诊0例开封seo公司
  • 浪漫做爰网站安福县住房和城乡建设局网站
  • 温州做网站的公司网页美工设计实践性教案
  • 巩义网站建设定制在网站社保减员要怎么做
  • 大庆市住房与城乡建设局网站网站开发有哪些模块
  • 动漫网站设计模板汕头达濠
  • 甘肃做网站多少钱短网址还原网站
  • 省厅建设信息网网站拓者设计吧官方网站
  • 贵州手机网站建设阿里云虚拟主机配置wordpress
  • 计算机网站建设是什么意思亚马逊跨境电商怎么开店
  • 网站图片太多怎么优化做网站前台后台是怎么连接的
  • 货源网站 源码服装网站建设进度及实施过程
  • PHP网站建设的课后笔记wordpress小程序地图
  • 网站域名绑定ip网站一片空白
  • 糖果屋网站建设策划书网站建设费用IP