# PHP 数据库进阶:事务、索引与慢查询

举报
yd_220371319 发表于 2026/10/09 23:15:14 2026/10/09
【摘要】 会写 SELECT 只是数据库入门。真正做项目后,更容易遇到数据一致性、查询变慢和并发问题。## 事务例如转账:```text账户 A - 100账户 B + 100```两个操作应该作为整体:```php$pdo->beginTransaction();try {    // 扣款    // 加款    $pdo->commit();} catch (Throwable $e) {   ...


会写 SELECT 只是数据库入门。真正做项目后,更容易遇到数据一致性、查询变慢和并发问题。

## 事务

例如转账:

```text
账户 A - 100
账户 B + 100
```

两个操作应该作为整体:

```php
$pdo->beginTransaction();

try {
    // 扣款
    // 加款

    $pdo->commit();
} catch (Throwable $e) {
    $pdo->rollBack();
    throw $e;
}
```

## 索引

如果经常:

```sql
SELECT * FROM users WHERE email = ?;
```

可以考虑:

```sql
CREATE INDEX idx_users_email ON users(email);
```

但索引不是越多越好,它也会占空间并增加写入成本。

## EXPLAIN

遇到慢 SQL,可以:

```sql
EXPLAIN SELECT ...;
```

看看数据库采用了什么执行计划。

## N+1

例如先查 100 个订单,再每个订单查询一次用户:

```text
1 次订单查询
+
100 次用户查询
=
101 次查询
```

数据量一大就会出问题。

## 小结

优化数据库之前先测量。SQL、索引、锁、网络和 PHP 本身都可能是瓶颈。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。