环境准备:
选择一个合适的后端框架(如Flask、Django等)。
设置一个数据库(如MySQL、PostgreSQL等),并创建相应的数据表。
准备一些测试数据,用于后续的查询操作。
未优化前的代码:
编写一个基本的API接口,用于从数据库中查询数据。
不使用任何优化手段,直接执行查询操作。
from flask import Flask, jsonify from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' # 示例使用SQLite数据库 db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'<User {self.name}>' # 未优化的查询函数 def get_users_without_optimization(): users = User.query.all() return [user.to_dict() for user in users] @app.route('/api/users', methods=['GET']) def get_users(): users = get_users_without_optimization() return jsonify(users) if __name__ == '__main__': db.create_all() # 创建数据库表 app.run(debug=True)
优化后的代码:
使用数据库索引来加速查询。
使用分页查询来减少单次查询返回的数据量。
缓存查询结果,避免重复查询相同的数据。
from flask import Flask, jsonify, request from flask_sqlalchemy import SQLAlchemy from sqlalchemy import func # ...(其他配置保持不变)... # 使用数据库索引加速查询(在User模型的email字段上添加索引) class User(db.Model): # ...(其他字段保持不变)... email = db.Column(db.String(120), unique=True, nullable=False, index=True) # 添加索引 # 优化后的查询函数,使用分页和索引 def get_users_with_optimization(page=1, per_page=10): # 使用分页查询 users = User.query.paginate(page, per_page, error_out=False) return [user.to_dict() for user in users.items] @app.route('/api/users', methods=['GET']) def get_users(): page = request.args.get('page', 1, type=int) per_page = request.args.get('per_page', 10, type=int) users = get_users_with_optimization(page, per_page) return jsonify(users)
代码展示了如何通过添加数据库索引和使用分页查询来优化数据库查询性能。