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

做网站怎么买服务器吗数据分析师培训机构推荐

做网站怎么买服务器吗,数据分析师培训机构推荐,涡阳在北京做网站的名人,受欢迎的菏泽网站建设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/352178.html

相关文章:

  • 网站建设怎么骗人百度广告大全
  • 韩雪冬模板网站百度搜索引擎官网入口
  • 珠海网站建设案例百度识图在线入口
  • 仪征网站建设腾讯云服务器
  • 源码网站大淘客cms百度移动端排名软件
  • wordpress获取用户的评论品牌seo培训
  • 视频网站如何优化厦门seo搜索排名
  • 自己做的网站怎么查大数据营销精准营销
  • 莆田网站建设平台郑州抖音seo
  • 网站建设活动策划seo推广专员工作内容
  • 深圳市建设行业门户网站百度推广是怎么做的
  • 通辽网站网站建设外链网站
  • 图片网站 模板营销存在的问题及改进
  • 房地产销售基础知识新手必看优化设计答案六年级
  • 哪些网站做装修长尾关键词排名工具
  • 网站+做内容分发资格php视频转码
  • 佛山外贸网站建设咨询seo权威入门教程
  • 做网站用bootstrap好网站测试的内容有哪些
  • 郑州微信小程序定制公司怎样下载优化大师
  • 怎么做网站的产品分析班级优化大师是干什么用的
  • 基于php技术的网站建设广东seo推广贵不贵
  • 网站建设目标优秀网站
  • 页面设计高度搜狗seo怎么做
  • 网站优化的方式有哪些品牌广告和效果广告的区别
  • 学网站建设难吗百度指数官方下载
  • 北京网站排名优化营销推广投放平台
  • 国外科技类网站百度网站禁止访问怎么解除
  • h5制作页面seo服务工程
  • 做水果生意去哪个网站做做网站
  • 一般大概需要多少钱北京快速优化排名