Skip to content

Commit

Permalink
线上裸二进制文件部署+强制走索引的场景
Browse files Browse the repository at this point in the history
  • Loading branch information
yudidi committed Sep 9, 2024
1 parent f1bf110 commit c2cd631
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
5 changes: 5 additions & 0 deletions _posts/2024-08-29-cp-vs-mv.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ tags: [部署]

# 问题解决

用mv命令即可
```text
# 备份+覆盖
cp cron cron.back && mv cron /data/bin/cron
```
# 参考资料

1.[Text File Busy 问题讨论](https://csyangchen.com/text-file-busy-issue.html)
Expand Down
51 changes: 51 additions & 0 deletions _posts/2024-09-09-force-index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
layout: post
title: mysql和mongodb需要强制指定索引的场景
categories: [mysql mongodb]
tags: [mysql mongodb]
---

# 现象

# 问题原因

# 问题解决

在使用MySQL和MongoDB时,虽然数据库引擎通常会自动选择最优的索引来执行查询,但有些情况下可能需要强制指定索引,以确保查询性能。这些场景包括但不限于以下几种:

### MySQL

1. **查询优化器选择不理想索引**
当MySQL的查询优化器选择的索引并不是最优的,可以使用 `FORCE INDEX` 强制使用特定的索引。例如:
```sql
SELECT * FROM my_table FORCE INDEX (index_name) WHERE column = 'value';
```

2. **覆盖索引**
当一个索引包含所有需要查询的列时,可以通过指定索引来强制使用覆盖索引,这样可以避免访问表的数据行,提高查询速度。

3. **避免查询优化器误判**
在一些复杂查询中,查询优化器可能会做出不理想的选择,指定索引能避免这种情况。

### MongoDB

1. **复合索引选择**
当有多个复合索引存在时,MongoDB查询优化器可能不会总是选择最优的索引。在这种情况下,可以使用 `hint` 方法来强制指定一个索引。例如:
```javascript
db.collection.find({field: value}).hint("index_name");
```

2. **调试和性能测试**
在调试和性能测试时,可以通过 `hint` 强制使用特定的索引,从而分析不同索引对查询性能的影响。

3. **避免全表扫描**
如果查询优化器误判导致全表扫描,可以通过指定索引来避免这种情况,提高查询性能。

### 总结

虽然数据库引擎通常能够自动选择最优索引,但在某些特定场景下,强制指定索引是必要的。无论是MySQL还是MongoDB,合理使用索引能显著提升查询性能,但也需要谨慎,避免对数据库性能产生负面影响。

# 参考资料

1.[]()
2.[]()

0 comments on commit c2cd631

Please sign in to comment.