$result = $mysqli->query("SELECT id,name FROM users"); $data = []; while ($row = $result->fetch_assoc()) { $data[] = [ 'user_id' => $row['id'], 'username' => htmlspecialchars($row['name']) ]; } $result->free(); // 显式释放内存
with connection.cursor() as cursor: cursor.execute("SELECT * FROM orders WHERE status='pending'") # 使用生成器减少内存占用 for row in cursor.iterrows(): process_row(row)
类型 | 写入速度 | 查询效率 | 适用场景 |
---|---|---|---|
临时表 | 快 | 高 | 复杂数据分析 |
JSON文件 | 中 | 低 | 数据备份/跨系统交互 |
Redis缓存 | 极快 | 极高 | 高频访问的热数据 |
临时表创建示例:
CREATE TEMPORARY TABLE temp_orders ENGINE=Memory AS (SELECT * FROM orders WHERE create_date > '2025-01-01');
try (Statement stmt = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { stmt.setFetchSize(Integer.MIN_VALUE); ResultSet rs = stmt.executeQuery("SELECT * FROM sensor_data"); while (rs.next()) { // 逐行处理避免OOM } }
import pandas as pd df = pd.read_sql("SELECT * FROM sales", con=engine) # 内存优化技巧 df['price'] = df['price'].astype('float32') df = df.groupby('category').agg({'sales':'sum'})
内存消耗对比测试
延迟优化方案
$stmt = $mysqli->prepare("SELECT email FROM users WHERE id=?"); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result();
N+1查询问题
User.all.each do |user| puts user.posts.count # 每次循环执行新查询 end
字符集陷阱
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
敏感数据脱敏存储
CREATE VIEW masked_users AS SELECT id, CONCAT(LEFT(name,1),'***') AS name, INSERT(phone,4,4,'****') AS phone FROM users;
结果集加密传输
# Nginx配置强制HTTPS add_header Strict-Transport-Security "max-age=31536000";