我在一个在windows和linux下运行的应用程序中使用python中的sqlite3。我的数据库文件目前在700 MB范围内。
我认识到有关我最大表中条目数的一个特殊性能问题。它由10列整数和浮点数和一个varchar组成。
该表有1.6 Mio行。对于该大小,每个SELECT或UPDATE命令需要327ms。这对我的应用程序来说太长了,因为它现在主要等待sqlite。
我认识到,随着桌面尺寸的下降,性能会急剧增加。我找到了:
结论:使用索引搜索时间几乎保持不变,而搜索时间没有索引几乎随表格大小线性上升。只有非常小的表格,差异可以忽略不计。
答案 0 :(得分:6)
当查询时间与表大小呈线性关系时,您的查询可能正在进行全表扫描,这意味着它们必须读取表中的所有行。这通常意味着它们不是using indexes。
我们无法告诉您应该在不查看架构和查询的情况下编制索引。您可以将EXPLAIN QUERY PLAN放在EXPLAIN QUERY PLAN SELECT * FROM foo
之前,查看您的查询正在做什么。如果您看到“扫描表”是全表扫描。如果您看到使用索引的“USING INDEX”。
答案 1 :(得分:1)
确保SELECT和UPDATE的WHERE(和JOIN,如果使用)子句中的每一列都出现在索引中,或者是表的主键的一部分。
另请注意,索引引起的性能提升与查询结果的常量大小有关。如果查询结果的数量随表大小线性增长,则索引的影响会受到限制,因为转移回应用程序的结果数据量无法有效减少。在这种情况下,您可能需要进行更深入的性能分析。