SQLite3如何使用索引?

2024-02-15

我正在研究 SQLite3 索引。

这是一个表 COMPANY:

CREATE TABLE COMPANY(
ID INT PRIMARY KEY     NOT NULL,
NAME           TEXT    NOT NULL,
AGE            INT     NOT NULL,
ADDRESS        CHAR(50),
SALARY         REAL
);

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Allen', 25, 'Texas', 15000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'David', 27, 'Texas', 85000.00 );

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Kim', 22, 'South-Hall', 45000.00 );

INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );

=================================================== =====

SELECT * FROM COMPANY;

Results:

1|Paul|32|California|20000.0
2|Allen|25|Texas|15000.0
3|Teddy|23|Norway|20000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
6|Kim|22|South-Hall|45000.0
7|James|24|Houston|10000.0

让我们创建一个索引salary_index,

CREATE INDEX IF NOT EXISTS salary_index on COMPANY (SALARY);

它有什么作用以及如何使用它?

这次我在删除旧索引后创建了这样的索引:

CREATE INDEX IF NOT EXISTS salary_index on COMPANY (SALARY) 
WHERE SALARY > 50000;

添加索引后,我做了:

SELECT * FROM COMPANY;

原以为我只会看到工资高于50000的人,但我看到了低于50000的人。

我也尝试这样做:

SELECT * FROM COMPANY INDEXED BY salary_index;

然后我得到错误:没有查询解决方案 显然我必须这样做: SELECT * FROM COMPANY INDEXED BY salary_index WHERE SALARY > 50000; 其中条件必须与索引中的条件相同。

那么……我该如何使用索引?


索引永远不会改变查询的含义。 他们能做的就是加快你的一些查询;如果可能的话,它们会被自动使用。

索引对于以下用途很有用

  • 通过对索引列进行比较来查找记录:

    SELECT * FROM Company WHERE Salary = 20000.0;
    SELECT * FROM Company WHERE Salary BETWEEN 40000 AND 80000;
    

    其中还包括索引列上的联接;和

  • 排序记录:

    SELECT * FROM Company ORDER BY Salary
    

    其中还包括 GROUP BY 和 DISTINCT。

详细信息请参阅文档:
查询计划 http://www.sqlite.org/queryplanner.html
SQLite 查询规划器 http://www.sqlite.org/optoverview.html

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

SQLite3如何使用索引? 的相关文章

随机推荐

  • Xcode源代码控制查看历史修改文件失败

    I used Xcode要连接的源代码控制SVN服务器 查看源代码后 我执行了commit update 一切正常 但是当我点击源代码控制 gt 历史记录 然后单击 显示修改的文件 然后显示一个警报对话框 源代码管理操作失败 因为找不到工作
  • 如何与本机桌面 (win) 应用程序建立对等连接

    我需要与本机桌面 win 应用程序和网络浏览器建立对等连接 只是为了传输原始数据 从理论上讲 WebRTC 似乎是实现这一目标的唯一方法 如果您想使用 WebRTC 在浏览器和桌面之间交换数据 您可以使用此库将桌面部分编码为 C 语言 ht
  • 在 Android Activity 中从软件键盘监听 Webview 按键事件

    是否可以在 Android 主机应用程序中处理来自 Web 视图的软件键盘事件 例如 我的应用程序的 Activity 是否可以侦听显示 Google 网站的 Web 视图的搜索字段中键入的内容 考虑到下面描述的方法 如果我覆盖它返回 tr
  • 如何在 Python 中使用递归反转列表?

    我想要一个函数 它会使用递归返回给定列表的相反内容 我怎样才能做到这一点 将列表的第一个元素附加到反向子列表 mylist 1 2 3 4 5 backwards lambda l backwards l 1 l 1 if l else p
  • XML 解析使用但元素名称是动态的

    Simple XMLElement Object IpStatus gt 1 ti pid 20642 gt SimpleXmlElement Object 我有一个上面格式的 SimpleXMLElment 这个 XML 是在运行时生成的
  • Sailsjs 是否可以构建更复杂的模型

    我想在我的模型中包含数组或集合 这对于水线 mongoDB 来说是可能的吗 周围还有其他选择吗 example name Bundle col1 name anOtherModel subCol text aString col2 name
  • 在大表上使用 LIKE 操作时 MySQL 查询速度慢

    我有一个相当大的表 6 GB 并且在此查询上遇到性能问题 SELECT f TIME FORMAT f scheme H i as scheme TIME FORMAT f actual H i as actual DATE FORMAT
  • 获取 Matplotlib 绘图标签坐标

    我想访问图中的所有标签坐标 例如 我画两条线并显示图例 import matplotlib pyplot as plt plt plot 1 2 label first image plt plot 2 1 label second ima
  • 如果第一个元素是异常,为什么引发元组有效?

    我很难弄清楚这一点 它是关于在 Python 2 7 中引发异常时可能发生的错误 try raise 1 2 3 4 except Exception as ex print ex 这里的消息是 异常必须是旧式类或派生自 BaseExcep
  • Iron Router 数据触发 3 次

    我在 Router Config 上设置了一个带有加载模板的路由器 Router onBeforeAction loading this route clients path clients template clientsAll wait
  • 设置日期标头以降低 SpamAssassin 分数

    我使用了测试服务 verifier port25 com 来检查从我的 PHP 脚本发送电子邮件时发生的情况 由于某种原因 即使启用了 SPF 和 DKIM 它们最终还是出现在我的 GMail 垃圾邮件文件夹中 事实证明 SpamAssas
  • C# - 对基元数组进行排序并跟踪其索引的最快方法

    我需要一个float 待排序 我需要知道旧索引在新数组中的位置 这就是为什么我不能使用Array Sort 管他呢 因此 我想编写一个函数来对数组进行排序 并记住它从哪个索引获取每个值 float input new float 1 5 2
  • 强制变量仅保存某些值

    我正在使用 vs 2012 我有一个简单的字符串属性 string someString public string MyString get return someString 我希望该属性仅保留某些值 这样 当客户端使用此属性时 只能使
  • Amazon SimpleDB 用于开发环境/本地安装

    有没有一种方法 工具可以模拟Amazon的SimpleDB以进行开发 在我的上述探索中 我发现这个工具 http mac wareseeker com Tools simpledb dev 0 1 5 zip 3000833但这是针对 Ma
  • 通过内联汇编操作c变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何访问 c 变量以进行内联汇编操作 https stackoverflow com questions 14617953 how to access c variable for inline as
  • .net core build 生成本地化文件夹

    我有一个使用 net core 2 0 的 web asp net 解决方案 我正在使用以下命令构建它 dotnet publish MySolution sln configuration release output d test ou
  • `new_root.mainloop()` 不会使主窗口无响应

    假设我有这个 tkinter 脚本 import tkinter as tk def callback new root tk Tk new root mainloop print Done root tk Tk button tk But
  • 由于“仅允许安全来源”而无法使用 navigator.geolocation

    自从我使用以下命令创建网站以来 控制台中出现错误navigator geolocation getCurrentPosition 以下 我意识到这会在未来的某个时候引起问题 而且由于我只玩网络开发 所以我并没有太担心 但它现在已经完全搞砸了
  • 无法与 WPA2 android 连接

    我正在使用以下代码与 Android 中的 WPA2 连接 我可以与 WEP 和 WPA 连接 但我只获得 扫描 状态 我无法连接 WPA2 网络 你能告诉我需要进行哪些更改才能使此代码与 wpa2 WiFi 相关吗 private boo
  • SQLite3如何使用索引?

    我正在研究 SQLite3 索引 这是一个表 COMPANY CREATE TABLE COMPANY ID INT PRIMARY KEY NOT NULL NAME TEXT NOT NULL AGE INT NOT NULL ADDR