sqlite:获取所有行的最快方法(连续磁盘访问)

2024-05-02

我想使用 system.data.sqlite 读取表中的所有行。由于我有一个非常大的表(>450GB,超过 60 亿行),我想确保 sqlite 将使用连续的磁盘访问。正如您可能知道的那样,对硬盘的随机访问速度很慢。由于内存限制,我无法一次加载所有数据。因此,最佳方法是,如果 sqlite 读取数百 MB(连续),那么我处理该数据,而 sqlite 读取下一个数据。

我如何确定 sqlite 将以这种方式进行磁盘访问,而不是从硬盘上的一个位置跳到另一个位置?

我知道的事情(我认为这些建议会出现):

  • 使用其他 DBMS 可能会更好。但我想/需要用这个来解决它。
  • 我知道当我处理这些数据时,磁盘头将由操作系统定位在其他数据上。这没关系。只是连续读取几百MB而已。
  • 我不想/可以将数据库文件分割成更小的部分

我找到了这篇文章,但它没有正确解决我的问题:
检索 SQLite 中所有项目的最快方法是什么? https://stackoverflow.com/questions/2947165/which-is-the-fastest-way-to-retrive-all-items-in-sqlite


这就是聚集索引的用途。 sqlite 不支持它们。

以下内容复制自:http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuningWindows http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuningWindows

四:聚集索引

SQLite 不支持聚集索引(简单来说,强制索引 数据库中的数据以相同的顺序物理放置 因为索引需要它。)

这意味着如果您的索引是连续的 INTEGER,则记录是 在数据库中以 INTEGER 顺序物理排列,1 然后 2 然后 3.

您无法创建聚集索引,但可以按顺序对数据进行排序 这样任何历史数据都可以很好地排序。当然,作为 数据库成熟了,你会失去它,但它有帮助

其他人发布了这个,这是一个很好的例子,所以我会的。 如果你有一个表WIBBLE,你想经常访问它的字段KEY, 如果一切都井然有序就好了。使用命令行 工具,您可以通过执行以下操作来创建假集群:

create table wibble2 as select * from wibble;
delete from wibble;
insert into wibble select * from wibble2 order by key;
drop table wibble2;

最重要的是,您可以手动重新排序记录,但我想只有当您不打算经常写入表时,这才对您有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite:获取所有行的最快方法(连续磁盘访问) 的相关文章

  • 为什么android SQLite可以将双精度值(java 8字节)存储到float列中

    Create Table db execSQL CREATE TABLE PERSONS TABLE PersonsColumns ID INTEGER PRIMARY KEY AUTOINCREMENT PersonsColumns HE
  • 带有复合主键的 Room @Relation

    我的问题是这个问题的延伸 也是我的 gt 房间复合主键链接到外键 https stackoverflow com questions 50248668 room composite primary key link to foreign k
  • SQLite3内存数据库到磁盘的纯Python备份

    在不安装额外模块的情况下 我如何使用SQLite备份API https sqlite org c3ref backup finish html将内存数据库备份到磁盘数据库 我已成功执行磁盘到磁盘备份 但将已存在的内存中连接传递给sqlite
  • Samsung Tab2 中的 SQLite 数据库(外部 Micro SD 卡)

    这些是我的 SAMSUNG TAB2 中的内存 1 Internal 2 Sdcard 3 Extrenal sdcard 可移动内存 不要混淆sdcard and Extrenal sdcard Extrenal sdcard is mi
  • 如何在html5中使用现有的sqlite数据库

    我已经使用 sqlite 浏览器创建了一个 sqlite 数据库文件 我有一个文件 sample sqlite 现在我想知道如何在 javascript 中导入此文件并使用 sqlite 文件中的数据 我一直在使用下面提到的脚本 var d
  • sqlite 3“SQL 错误‘内存不足’(7)”objc

    嗨 有人可以指出我做错了什么吗 错误是这样的 SQL error out of memory 7 NSArray RecipeInfo NSMutableArray retval NSMutableArray alloc init NSSt
  • 在 Windows Phone 8 中使用 SQLite 时无法使用商店测试套件

    我在 Windows Phone 8 项目中使用 SQLite WP80 version 3 7 16 现在 当我尝试使用商店测试套件进行测试时 它说 应用程序包 XAP 不是最新的 重新编译并重试 将解决方案配置更改为发布并将平台更改为任
  • 当查询没有返回记录时,如何通过 PDO/Sqlite 获取列名?

    下面的代码允许我将 SQL 语句传递给一个类并调用其方法来显示一个漂亮的结果表 包括列名 然而 如果没有结果 我仍然想要列名要显示 很遗憾 getColumnMeta没有像我发现的其他示例中那样返回任何数据 有谁知道如何让 getColum
  • 不使用窗口函数实现 SQL 查询

    我读过 可以通过创造性地使用连接等来实现在 SQL 窗口函数中可以执行的任何操作 但我不知道如何实现 我在这个项目中使用 SQLite 它目前没有窗口函数 我有一个有四列的表 CREATE TABLE foo id INTEGER PRIM
  • SQLite 在使用之间不保存数据

    我制作了一个包含以下内容的模块 import sqlite3 as sq connection sq connect test db cursor connection cursor cursor execute DROP TABLE IF
  • 迭代 Sqlite-query 中的行

    我有一个表布局 我想用数据库查询的结果填充它 我使用全选 查询返回四行数据 我使用此代码来填充表行内的 TextView Cursor c null c dh getAlternative2 startManagingCursor c th
  • 使用 SQLite 测试 NHibernate“没有这样的表” - 生成模式

    我正在尝试使用内存中的 SQLite 数据库来测试 NHibernate 提供的数据层 我读过很多关于如何进行此设置的博客和文章 但我现在很困惑为什么它不起作用 问题 当我运行单元测试时 我收到错误 没有这样的表 学生 我读过的文章表明这
  • 如何在SQLite中的两个表之间复制数据?

    我有两个具有不同列的表 如下所示 table1 id title name number address table2 id phone name address 如何将数据 名称 地址 从表 1 复制到表 2 我的问题有两种情况 第一 t
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • Python 和 sqlite3.ProgrammingError:不允许递归使用游标

    我写了一个像这样的Python程序 它应该在多线程模式下运行 def Func host cursor db cursor execute SELECT If index Username Version Community Ip traf
  • Heroku 上重启后 Better-SQLite3 数据库重置

    我有一个 Discord 机器人better sqlite3 https github com JoshuaWise better sqlite3硬币和 XP 数据库 直到两周前它一直工作得很好 现在 每次重新启动后 它只会恢复 XP 和硬
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 如何实现 ALTER TABLE 的示例[重复]

    这个问题在这里已经有答案了 我已经多次问过这个问题 但尚未得到完整的答案 如何实现 ALTER TABLE 语句以向数据库添加列 有人可以给我举个例子吗 请阅读SQLite ALTER TABLE 参考 http sqlite org la
  • 从 SQLite 命令行 shell 中打开数据库文件

    我正在使用SQLite 命令行外壳 http www sqlite org sqlite html 如文档所述 我可以通过将数据库作为可执行文件的参数提供来打开数据库 sqlite3 data db 我不知道如何打开数据库文件在工具内在调用

随机推荐

  • 每个屏幕方向的文本大小不同?

    我正在开发一个计算器 在横向上我添加了更多按钮 因此每个按钮都会变得更小以适应额外的按钮 此时 我只是使用较小的字体大小 以便它们在横向模式下适合较小的按钮 但是我希望纵向上的文本比横向上的文本更大 我一直在尝试找出一种根据屏幕方向使用不同
  • 如何删除构建产品

    是否可以自动删除由生成的构建产品setup py脚本基于设置工具 我刚刚开始一个新的 Python 项目 这是我第一次使用设置工具作为一名开发人员 所以我可能会犯错 当我使用构建项目时python setup py bdist 三个目录 b
  • Java 安全管理器完全禁用反射

    我在 Stackoverflow 上阅读了很多关于这个问题的问题 但无法停止找到我的问题的解决方案或答案 如果已经有一个 如果有人给出提示 我将不胜感激 我的问题是是否可以完全禁用不可信代码的反射 功能类似于getDeclaredMetho
  • CSV 损坏,如何修复?

    我正在尝试解析 CSV 我想将它放入数据库或只是用 JavaScript 解析它 但由于语法损坏 任何一种方法都会失败 我的整个 CSV 文件在这里 https gist github com 1023560 https gist gith
  • RTIMER_NOW() 和clock_time() 之间的Contiki 区别

    我想知道之间的区别 RTIMER NOW and clock time 功能 我可以将它们返回的值存储在 int 变量中吗 它们返回的是整个模拟的时间还是调用它们的单个节点的时间 如果一个节点在模拟中第一个事件发生后 5 秒启动其主进程 这
  • 如何在谷歌地图的边缘创建填充

    我有一个非常繁忙的谷歌地图应用程序 我正在尝试在地图的外边缘周围创建一个 缓冲区 以便谷歌地图命令不会把东西放在那里 我的解决方案是创建不可见的 div 并将它们作为控件添加到地图中 每个边缘一个 这似乎很有效 因为所有谷歌命令都会看到它们
  • 无法覆盖 Rustup 工具链以自定义构建 iOS 工具链

    我正在用我的 Rust 版本创建我自己的工具链 我需要它与 iOS 架构进行交叉编译 当尝试设置默认工具链或覆盖当前目录的工具链时 我收到有关工具链名称的错误 以下是我创建这个新工具链所采取的步骤 创建 Rustup 工具链 rustup
  • Twitter Bootstrap 2:如何获得响应式设计以将侧边栏放在底部而不是顶部?

    Twitter 的 Bootstrap 2 http twitter github com bootstrap 最后添加了原生响应式设计 但是 默认情况下 当浏览器宽度低于最小宽度时 它将侧边栏放在顶部 我可以看到这对于许多网站来说是如何工
  • 执行 rebase 后,Git 提交会在同一分支中重复

    我理解 Pro Git 中提出的场景是关于变基的危险 https git scm com book en v2 Git Branching Rebasing rebase peril 作者基本上告诉你如何避免重复提交 不要对已推送到公共存储
  • Flex,连续扫描流(来自套接字)。我是否错过了使用 yywrap() 的某些内容?

    使用 Flex 进行模式识别 在基于套接字的扫描仪 连续流 上工作 Flex 找不到与 数组边界 重叠的匹配项 所以我实现了 yywrap 来设置新的数组内容 一旦 yylex 检测到 它将调用 yywrap 到目前为止还没有成功 基本上
  • Linux下对多个文件进行排序

    我有多个 很多 文件 每个都非常大 file0 txt file1 txt file2 txt 我不想将它们合并到一个文件中 因为生成的文件将超过 10 场演出 每个文件中的每一行都包含一个 40 字节的字符串 现在字符串的排序相当好 大约
  • 更快的第二好 MST 算法?

    我正在为此苦苦挣扎 我们可以使用 Kruskal 算法或 Prim 算法得到 MST 对于 第二好的 MST 我可以 首先使用上述任一算法获取 MST 对于来自 MST 的最优边缘的每个 V 1 A 首先删除或标记边缘b 继续计算 MST
  • 尝试使 Tableview 可点击时发生 JavaFX 错误

    我正在尝试使表格视图可单击 它将返回单击的单元格中的文本 尝试在 Netbeans 中编译时收到两个错误 所有代码均取自 示例12 11 单元格编辑的替代解决方案 官方表格视图教程 http docs oracle com javafx 2
  • 静态/动态类型与静态/动态绑定

    大家这4个术语有什么区别 能举个例子吗 Static and dynamic是指解决某些编程元素的时间点的行话 Static表示解析是在程序构建时发生的 Dynamic表示解析是在程序运行时发生的 静态和动态打字 Typing指由于数据值之
  • Spring webflux 中 Mono> 与 Flux 的区别

    我的理解是Mono
  • 在 Android 设备/模拟器上加载 NPAPI 插件

    我编译了从这个链接获得的示例 NPAPI 插件http code google com p npapi sdk http code google com p npapi sdk 使用NDK编译后 我得到了 so文件libs armeabi
  • 速度事件处理程序

    在速度中 当你执行 object variable 时 如果它无法找到 getter 函数 访问它或者 getter 返回 null 它只会在页面上显式显示 object variable 我知道有一个安静的参考 但我不想添加 对数千个变量
  • 针对 Laravel 后端的 Angular Auth

    我正在使用 Laravel 创建一个应用程序 并构建一个小型内部 API 来连接到 Angular 前端 我的身份验证工作正常 但想确保这是一种可接受的用户登录方式 并确保一切都是安全的 会话控制器 public function inde
  • XP 和 Vista 之间使用 Winsock API 的 UDP 多播差异

    Windows XP 和 Windows Vista 之间设置 UDP 多播套接字所需的实现似乎有所不同 具体来说 在 Windows XP 下 您must call bind 在您可以引用任何特定于多播的套接字选项之前 然而 在windo
  • sqlite:获取所有行的最快方法(连续磁盘访问)

    我想使用 system data sqlite 读取表中的所有行 由于我有一个非常大的表 gt 450GB 超过 60 亿行 我想确保 sqlite 将使用连续的磁盘访问 正如您可能知道的那样 对硬盘的随机访问速度很慢 由于内存限制 我无法