索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书后边的索引是非常相似的。

例如,如果您想在一本讨论某个话题的书中引用所有页面,您首先需要指向索引,索引按字母顺序列出了所有主题,然后指向一个或多个特定的页码。

索引有助于加快 SELECT 查询和 WHERE 子句,但它会减慢使用 UPDATE 和 INSERT 语句时的数据输入。索引可以创建或删除,但不会影响数据。

使用 CREATE INDEX 语句创建索引,它允许命名索引,指定表及要索引的一列或多列,并指示索引是升序排列还是降序排列。

索引也可以是唯一的,与 UNIQUE 约束类似,在列上或列组合上防止重复条目。

CREATE INDEX 命令

CREATE INDEX 的基本语法如下:

CREATE INDEX index_name ON table_name;

单列索引

单列索引是一个只基于表的一个列上创建的索引。基本语法如下:

CREATE INDEX index_name

ON table_name (column_name);

唯一索引

使用唯一索引不仅是为了性能,同时也为了数据的完整性。唯一索引不允许任何重复的值插入到表中。基本语法如下:

CREATE UNIQUE INDEX index_name

on table_name (column_name);

组合索引

组合索引是基于一个表的两个或多个列上创建的索引。基本语法如下:

CREATE INDEX index_name

on table_name (column1, column2);

是否要创建一个单列索引还是组合索引,要考虑到您在作为查询过滤条件的 WHERE 子句中使用非常频繁的列。

如果值使用到一个列,则选择使用单列索引。如果在作为过滤的 WHERE 子句中有两个或多个列经常使用,则选择使用组合索引。

隐式索引

隐式索引是在创建对象时,由数据库服务器自动创建的索引。索引自动创建为主键约束和唯一约束。

实例

下面是一个例子,我们将在 COMPANY 表的 salary 列上创建一个索引:

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

现在,让我们使用.indices命令列出 COMPANY 表上所有可用的索引,如下所示:

sqlite> .indices COMPANY

这将产生如下结果,其中sqlite_autoindex_COMPANY_1是创建表时创建的隐式索引。

salary_index

sqlite_autoindex_COMPANY_1

您可以列出数据库范围的所有索引,如下所示:

sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

DROP INDEX 命令

一个索引可以使用 SQLite 的 DROP 命令删除。当删除索引时应特别注意,因为性能可能会下降或提高。

基本语法如下:

DROP INDEX index_name;

您可以使用下面的语句来删除之前创建的索引:

sqlite> DROP INDEX salary_index;

什么情况下要避免使用索引?

虽然索引的目的在于提高数据库的性能,但这里有几个情况需要避免使用索引。使用索引时,应重新考虑下列准则:

索引不应该使用在较小的表上。

索引不应该使用在有频繁的大批量的更新或插入操作的表上。

索引不应该使用在含有大量的 NULL 值的列上。

索引不应该使用在频繁操作的列上。

sqlite 复合唯一索引_SQLite 索引(Index)相关推荐

  1. sqlite 复合唯一索引_sqlite 批量插入, 重复插入(更新)

    [FMDBManager inDatabase:^(FMDatabase *db) { [db shouldCacheStatements]; //开始启动事务 [db beginTransactio ...

  2. mysql 唯一索引和复合索引 区别_MySQL复合唯一索引分析

    MySQL复合唯一索引分析 关于复合唯一索引(unique key 或 unique index),网上搜索不少人说:"这种索引起到的关键作用是约束,查询时性能上没有得到提高或者查询时根本没 ...

  3. 通过复合唯一索引及redis实现抢单业务模式

    通过复合唯一索引及redis实现抢单业务模式 具体的应用场景:投递到某个区域的订单,该区域的所有负责该区域的经纪人可以通过抢单来处理相关的订单. 1.mysql中主要通过两张表:一张可抢单表,一张抢单 ...

  4. 数据库表的主键、唯一约束和索引

    目录 1.MySQL的主键. 2.MySQL的唯一约束. 3.MySQL的索引. 4.主键.唯一约束和唯一索引的区别. 1.MySQL 的 主键. "主键" 的完整称呼是 &quo ...

  5. mysql 复合索引,普通索引,索引分类总结

    对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合 ...

  6. mongo 唯一约束索引_mongodb索引详解(Indexes)

    索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进程使用大量的数据作遍历操作. 索引是一种特 ...

  7. 唯一聚集索引上的唯一和非唯一非聚集索引

    在上篇文章里,我讨论了唯一和非唯一聚集索引的区别.我们已经知道,SQL Server内部使用4 bytes的uniquifier来保证非唯一聚集索引行唯一.今天我们来看下唯一聚集索引上,唯一和非唯一非 ...

  8. MySQL创建索引(CREATE INDEX)

    索引的建立对于 MySQL 数据库的高效运行是很重要的,索引可以大大提升 MySQL 的检索速度. 基本语法 MySQL 提供了三种创建索引的方法: 1) 使用 CREATE INDEX 语句 可以使 ...

  9. 9、创建索引(CREATE INDEX)

    创建索引是指在某个表的一列或多列上建立一个索引,可以提高对表的访问速度.创建索引对 MySQL 数据库的高效运行来说是很重要的. 基本语法 MySQL 提供了三种创建索引的方法: 1) 使用 CREA ...

最新文章

  1. 使用R构建随机森林回归模型(Random Forest Regressor)
  2. mxnet 和pytorch比较
  3. Jsp—02—项目:登录案例
  4. 有一天老板和我要几个关键数据……
  5. Atitit 软件工程概览attilax总结
  6. Android开发之高德地图无法显示地图的原因
  7. mysql安装配置yum_在CentOS 7下使用yum配置MySQL源并安装MySQL
  8. 英才计划计算机潜质测评试题,湖北省2020年“英才计划”潜质测试的通知
  9. MiniDao1.8.3 版本发布,轻量级Java持久化框架
  10. 20180602_Eclipse配置Maven的本地仓库和阿里云镜像
  11. Use the onReadyStateChange Property (Visual Basic)
  12. 日本最后一刻阻拦鸿海收购夏普:质疑董事私心
  13. 李阳疯狂英语900句 121-330
  14. java开发实例大全_java编程实例大全100例
  15. checkbox不全部选中,会跳出提示(这个是我记录的重点)
  16. Hive集成Tez让大象飞起来
  17. Unity-Live2d(鼠标拖拽触发动作变化)
  18. 2023年中职网络安全竞赛解析——隐藏信息探索
  19. CAPICAPICOM的一些知识[转]
  20. 【转】我在赶集网工作的两个月总结

热门文章

  1. 面向对象编程(1)-类和实例
  2. SQL删除数据delete
  3. 贪心算法——部分背包(洛谷 P2240)
  4. 服务器centos安装mysql_centos下安装mysql服务器的方法
  5. MySQL 表空间加密插件 Keyring
  6. Oracle 19c集群重装步骤详解
  7. SQL无所不能:DBA宝妈宝爸系列分享
  8. Redis这么快你知道吗?
  9. Java的这个强大功能,很多人都不知道
  10. 云图说|初识云数据库GaussDB(for Cassandra)