为什么通过SQLAlchemy会话首次查询较慢

0 投票
0 回答
35 浏览
提问于 2025-04-12 07:38

我正在分析一个SQLAlchemy的仓库方法,用来获取某个日期的订单

def test_profile_get_orders_asof():
    for i in range(1, 11):
        with DBContextManager() as session:
            data_repo = SqlAlchemyRepository(session)
            sut = data_repo.get_orders_asof
            sut = profile(
                sut, immediate=True, filename=f"get_orders_asof_{i}.prof"
            )
            sut(datetime(2022, 12, 1, tzinfo=pytz.utc))

而且这个方法第一次调用的总执行时间总是比较长

[1.3190752999999988,
 0.2215163999999999,
 0.25437130000000036,
 0.19252480000000013,
 0.1886178,
 0.22220109999999996,
 0.21765510000000007,
 0.2034394999999999,
 0.19447940000000002,
 0.20421450000000013]

这个方法 data_repo.get_orders_asof 大概是这样的

from datetime import datetime
import pandas as pd

def get_orders_asof(self, date: datetime) -> pd.DataFrame:
    asof_date = date.strftime("%Y-%m-%d")
    column_types = {
        "id": "int",
        "quantity": "int",
        "price": "float",
        "date": "str"
    }
    return pd.read_sql(
        "SELECT * FROM Orders WHERE order_date <= ?", 
        con=self.session.get_bind(), params=(asof_date,), dtype=column_types
    )

它是针对一个SQL Server数据库执行的。为什么第一次调用会比后面的调用慢这么多呢?数据库有没有在缓存什么东西?

0 个回答

暂无回答

撰写回答