linux

ThinkPHP数据库优化技巧有哪些

小樊
42
2025-11-26 17:09:31
栏目: 编程语言

ThinkPHP数据库优化技巧清单

一 查询与索引优化

二 关联与缓存策略

三 架构与连接管理

四 监控与数据库配置

五 可直接复用的优化示例

$list = UserModel::with(['profile', 'orders'])
    ->where('status', 1)
    ->where('id', '>', $lastId)
    ->order('id', 'asc')
    ->limit(20)
    ->select();
$config = cache('config_dict');
if (!$config) {
    $config = ConfigModel::where('status', 1)
        ->field('k,v')
        ->useIndex('idx_status') // 视库表支持情况使用
        ->select()
        ->column('v', 'k');
    cache('config_dict', $config, 3600); // 1小时
}
// 开发/预发环境先分析
$sql = "SELECT u.id,u.name,o.total FROM user u
        JOIN `order` o ON o.user_id = u.id
        WHERE u.status = ? AND o.create_time >= ?
        ORDER BY o.create_time DESC LIMIT 50";
Db::listen(function($sql, $runtime) {
    // 记录或上报慢 SQL
    if ($runtime > 0.2) {
        // 告警/写入慢查询日志
    }
});
$rows = Db::query($sql, [1, '2025-01-01']);
// 用 EXPLAIN 检查是否走索引、是否出现 Using filesort/Using temporary
// config/database.php
'connections' => [
    'mysql' => [
        'type'            => 'mysql',
        'hostname'        => 'write.db.local',
        'database'        => 'app',
        'username'        => 'write',
        'password'        => '***',
        'deploy'          => 1,         // 启用分布式
        'rw_separate'     => true,      // 开启读写分离
        'master_num'      => 1,
        'slave_no'        => [],        // 读库序号,可配多个
    ],
]

0
看了该问题的人还看了