Почему метод Pandas читает SQL медленнее?

#python #sql-server #pandas

Вопрос:

Когда я выполняю один и тот же запрос через SSMS, это занимает 1 секунду. Но когда я запускаю его с pandas.read_sql(query, self.conn) помощью, это занимает 10 секунд. Что может быть причиной такой медлительности? Тот же SQL-сервер и тот же клиент.

 queryExecStart = time.time()
sqlDataFrame = pandas.read_sql(query, self.conn)
self.logging(level="info", msg=f"Pandas data read duration {round(time.time() - queryExecStart, 3)} sec. Query: {queryName}")
 

Комментарии:

1. Пожалуйста, покажите запрос, план запроса, а также, желательно, таблицы и определения индексов. Вы можете поделиться планом запроса с помощью brentozar.com/pastetheplan

2. Что select @@options выводится в SSMS и Pandas? Вероятно, они используют разные планы из-за разных вариантов подключения к клиенту. Можете ли вы извлечь планы из хранилища кэшированных планов, чтобы сравнить их?

3. Привет, план выполнения такой, как в URL -> > brentozar.com/pastetheplan/?id=rkWsH8EEt

4. Этот URL-адрес является планом запроса в кэшированном плане запроса, выполняемого на стороне клиента python — > > brentozar.com/pastetheplan/?id=r1gLuLNEF

5. Я собрал несколько новых длительностей. Время выполнения занимает 0,5 с (курсор.выполнить(запрос)). Но для получения данных с помощью курсора требуется более 5 секунд. метод fetchall (). Однако SSMS также получает данные того же размера с сервера на сторону клиента. Общее время в SSMS ~1 сек. Почему pyodbc требует больше времени для получения данных того же размера на стороне клиента, чем SSMS?