cuốn sách gpt4 ai đã làm

python — Tại sao tôi nhận được các gói truy vấn khác nhau cho cùng một truy vấn trong SQLite3?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 18:05:45 28 4
mua khóa gpt4 Nike

Tôi có một cơ sở dữ liệu có thể được cập nhật và truy vấn theo ba cách khác nhau:

  • Mô-đun Python 3.2 SQLite3 gốc
  • DBVisualizer cho SQLite JDBC
  • tập tin thực thi sqlite3

Tôi đang chạy cùng một truy vấn trên cả ba:

GIẢI THÍCH KẾ HOẠCH TRUY VẤN
SELECT DISTINCT
phương thức.phương thức

TỪ sự kết hợp

Kết quả INNER THAM GIA
TRÊN result.combination_key = combo.combination_key

INNER JOIN datalog AS datalog1
TRÊN datalog1.datalog_key = tổ hợp.datalog_key1

INNER JOIN datalog AS datalog2
TRÊN datalog2.datalog_key = tổ hợp.datalog_key2

Phương thức INNER THAM GIA
BẬT phương thức.method_key = result.method_key

WHERE
datalog1.lot = 'datalog_name1' VÀ datalog2.lot = 'datalog_name2'

Nhưng tôi nhận được ba kết quả khác nhau.

Trăn:

0 0 4 Phương thức SCAN TABLE SỬ DỤNG CHỈ SỐ COVERING sqlite_autoindex_method_1 (~5 hàng)
0 1 0 Kết hợp BẢNG QUÉT (~1838311 hàng)
0 2 1 Kết quả BẢNG TÌM KIẾM SỬ DỤNG CHỈ SỐ BÌA sqlite_autoindex_result_1 (combination_key=? AND Method_key=?) (~1 hàng)
0 3 2 TÌM KIẾM BẢNG datalog NHƯ datalog1 SỬ DỤNG KHÓA CHÍNH SÁCH INTEGER (rowid=?) (~1 hàng)
0 4 3 TÌM KIẾM BẢNG datalog NHƯ datalog2 SỬ DỤNG KHÓA CHÍNH SÁCH INTEGER (rowid=?) (~1 hàng)

Trình hiển thị DB(biên tập:我刚刚将 Xerial sqlite jdbc 从 3.7 更新到 3.8,现在结果与 sqlite.exe 相同。看起来所有这些可能都是由于驱动程序差异造成的。 ..):

0 0 4 SCAN TABLE method USING COVERING INDEX sqlite_autoindex_method_1
0 1 2 SEARCH TABLE datalog AS datalog1 USING COVERING INDEX sqlite_autoindex_datalog_1 (ANY(program) AND lot=?)
0 2 0 SEARCH TABLE combination USING COVERING INDEX sqlite_autoindex_combination_1 (datalog_key1=?)
0 3 1 SEARCH TABLE result USING COVERING INDEX sqlite_autoindex_result_1 (combination_key=? AND method_key=?)
0 4 3 SEARCH TABLE datalog AS datalog2 USING INTEGER PRIMARY KEY (rowid=?)

sqlite.exe:

0 0 4 SCAN TABLE method USING COVERING INDEX sqlite_autoindex_method_1
0 1 2 SEARCH TABLE datalog AS datalog1 USING COVERING INDEX sqlite_autoindex_datalog_1 (ANY(program) AND lot=?)
0 2 0 SEARCH TABLE combination USING COVERING INDEX sqlite_autoindex_combination_1 (datalog_key1=?)
0 3 1 SEARCH TABLE result USING COVERING INDEX sqlite_autoindex_result_1 (combination_key=? AND method_key=?)
0 4 3 SEARCH TABLE datalog AS datalog2 USING INTEGER PRIMARY KEY (rowid=?)

问题1:为什么查询计划不同?

问题 2:如果我需要优化查询,我是否必须依赖于我用来运行查询的方法生成的查询计划?换句话说,我是否需要针对每个查询单独调整查询?

câu trả lời hay nhất

我找到了答案:所有这些驱动程序都来自不同版本的 sqlite3。

可执行文件 sqlite.exe 是最新的。

通过下载最新的 Xerial sqlite jdbc JAR 驱动程序并将 DBVis 指向它来升级 DBVisualizer。

bởi từhttp://www.sqlite.org/download.html下载最新的DLL来升级Python并手动替换我的Python目录中的sqlite.dll。

现在一切似乎都在运行。

关于python - 为什么在 SQLite3 中同一查询会得到不同的查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936842/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress