一、数据库设计与配置优化
username
、order_id
)添加索引,提升查询效率;避免过度索引(会增加写入开销)。TINYINT
代替INT
存储状态值,用VARCHAR(255)
代替TEXT
存储短文本),减少存储空间和I/O消耗。二、SQL查询优化
SELECT *
,只查询需要的字段(如User::field('id,name,email')->select()
),减少数据传输量;合理使用索引(如WHERE
条件、JOIN
字段加索引),避免索引失效(如LIKE '%keyword%'
、函数操作字段)。JOIN
代替子查询(如User::alias('u')->join('__ORDER__ o', 'u.id=o.user_id')->select()
),减少查询次数;确保JOIN
字段有索引。limit
结合索引(如User::page($page, 20)->order('id desc')->select()
),避免offset
过大导致的性能下降(如LIMIT 10000, 20
)。User::insertAll($dataList)
)、批量更新(Db::execute("UPDATE user SET status=1 WHERE id IN (1,2,3)")
),减少数据库交互次数,提升效率。三、缓存策略优化
Cache::remember('category_list', function(){ return Category::select(); }, 3600)
),避免重复查询;设置合理的过期时间(如1小时),平衡数据实时性与缓存效率。'tpl_cache' => true
),缓存静态页面或动态页面的部分内容(如头部、尾部),减少服务器解析模板的开销。四、连接与架构优化
'pool'
配置)复用数据库连接,减少连接创建和销毁的开销;开启持久连接('persistent' => true
),避免频繁建立TCP连接。Db::connect('slave')
),提升读取性能;主库专注于写操作,平衡负载。Route::resource('user', 'UserController')
),减少路由匹配时间;采用单应用模式('app_multi_module' => false
),降低文件I/O和配置检查的开销。五、代码与框架优化
Db::execute("INSERT INTO user (name,email) VALUES (:name,:email)", ['name'=>'张三', 'email'=>'zhangsan@example.com'])
),减少SQL解析时间;对需要保证数据一致性的操作(如订单创建、库存扣减)使用事务(Db::startTrans()
),避免脏数据。with
)优化关联查询(如User::with('orders')->find()
),减少N+1查询问题;避免在循环中查询关联数据(如foreach($users as $user){ $orders = $user->orders; }
)。'app_debug' => false
),避免记录过多日志(如SQL日志、错误日志),减少IO消耗。六、定期维护与监控
slow_query_log=1
),通过EXPLAIN
分析慢SQL(如EXPLAIN SELECT * FROM user WHERE username='张三'
),定位性能瓶颈(如缺少索引、全表扫描),针对性优化。OPTIMIZE TABLE
整理表碎片(针对InnoDB表),提升查询效率;清理无用数据(如过期订单、日志表数据),减少表数据量。