# PHP 数据库进阶:事务、索引与慢查询
【摘要】 会写 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)