一、创建索引:

在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法:
    sqlite> CREATE TABLE testtable (first_col integer,second_col integer);
    --创建最简单的索引,该索引基于某个表的一个字段。
    sqlite> CREATE INDEX testtable_idx ON testtable(first_col);
    --创建联合索引,该索引基于某个表的多个字段,同时可以指定每个字段的排序规则(升序/降序)。
    sqlite> CREATE INDEX testtable_idx2 ON testtable(first_col ASC,second_col DESC);
    --创建唯一性索引,该索引规则和数据表的唯一性约束的规则相同,即NULL和任何值都不同,包括NULL本身。
    sqlite> CREATE UNIQUE INDEX testtable_idx3 ON testtable(second_col DESC);
    sqlite> .indices testtable
    testtable_idx
    testtable_idx2    
    testtable_idx3
    从.indices命令的输出可以看出,三个索引均已成功创建。
    
二、删除索引:

索引的删除和视图的删除非常相似,含义也是如此,因此这里也只是给出示例:    
    sqlite> DROP INDEX testtable_idx;
    --如果删除不存在的索引将会导致操作失败,如果在不确定的情况下又不希望错误被抛出,可以使用"IF EXISTS"从句
    sqlite> DROP INDEX testtable_idx;
    Error: no such index: testtable_idx
    sqlite> DROP INDEX IF EXISTS testtable_idx;

三、重建索引:

重建索引用于删除已经存在的索引,同时基于其原有的规则重建该索引。这里需要说明的是,如果在REINDEX语句后面没有给出数据库名,那么当前连接下所有Attached数据库中所有索引都会被重建。如果指定了数据库名和表名,那么该表中的所有索引都会被重建,如果只是指定索引名,那么当前数据库的指定索引被重建。
    --当前连接attached所有数据库中的索引都被重建。
    sqlite> REINDEX;
    --重建当前主数据库中testtable表的所有索引。
    sqlite> REINDEX testtable;
    --重建当前主数据库中名称为testtable_idx2的索引。
    sqlite> REINDEX testtable_idx2;
   
四、数据分析:

和PostgreSQL非常相似,SQLite中的ANALYZE命令也同样用于分析数据表和索引中的数据,并将统计结果存放于SQLite的内部系统表中,以便于查询优化器可以根据分析后的统计数据选择最优的查询执行路径,从而提高整个查询的效率。见如下示例:
    --如果在ANALYZE命令之后没有指定任何参数,则分析当前连接中所有Attached数据库中的表和索引。
    sqlite> ANALYZE;
    --如果指定数据库作为ANALYZE的参数,那么该数据库下的所有表和索引都将被分析并生成统计数据。
    sqlite> ANALYZE main;
    --如果指定了数据库中的某个表或索引为ANALYZE的参数,那么该表和其所有关联的索引都将被分析。
    sqlite> ANALYZE main.testtable;
    sqlite> ANALYZE main.testtable_idx2;

五、数据清理:

和PostgreSQL中的VACUUM命令相比,他们的功能以及实现方式非常相似,不同的是PostgreSQL提供了更细的粒度,而SQLite只能将该命令作用于数据库,无法再精确到数据库中指定的数据表或者索引,然而这一点恰恰是PostgreSQL可以做到的。
    当某个数据库中的一个或多个数据表存在大量的插入、更新和删除等操作时,将会有大量的磁盘空间被已删除的数据所占用,在没有执行VACUUM命令之前,SQLite并没有将它们归还于操作系统。由于该类数据表中的数据存储非常分散,因此在查询时,无法得到更好的批量IO读取效果,从而影响了查询效率。
    在SQLite中,仅支持清理当前连接中的主数据库,而不能清理其它Attached数据库。VACUUM命令在完成数据清理时采用了和PostgreSQL相同的策略,即创建一个和当前数据库文件相同大小的新数据库文件,之后再将该数据库文件中的数据有组织的导入到新文件中,其中已经删除的数据块将不会被导入,在完成导入后,收缩新数据库文件的尺寸到适当的大小。该命令的执行非常简单,如:
    sqlite> VACUUM;

SQLite学习手册(索引和数据分析/清理)相关推荐

  1. SQLite学习手册(索引和数据分析/清理)-转

    一.创建索引: 在SQLite中,创建索引的SQL语法和其他大多数关系型数据库基本相同,因为这里也仅仅是给出示例用法:     sqlite> CREATE TABLE testtable (f ...

  2. SQLite学习手册(目录)

    在实际的应用中,SQLite作为目前最为流行的开源嵌入式关系型数据库,在系统的架构设计中正在扮演着越来越为重要的角色.和很多其它嵌入式NoSQL数据库不同的是,SQLite支持很多关系型数据库的基本特 ...

  3. 学习Stephen Liu的《SQLite学习手册(数据表和视图)》(一)

    好好学习,day day up.不能再玩了,学习要紧 以下内容主要基于对于Stephen Liu的博文SQLite学习手册(数据表和视图)的学习. 零.准备工作 先把sqlite3.exe的路径添加到 ...

  4. SQLite学习手册(开篇)

    一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征 ...

  5. SQLite学习手册(命令行工具)

    工欲善其事,必先利其器.学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的.最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快.言归正传吧,在SQLite的官方 ...

  6. SQLite学习手册(实例代码二)

    三.高效的批量数据插入: 在给出操作步骤之前先简单说明一下批量插入的概念,以帮助大家阅读其后的示例代码.事实上,批量插入并不是什么新的概念,在其它关系型数据库的C接口API中都提供了一定的支持,只是接 ...

  7. SQLite学习手册(锁和并发控制)

    一.概述: 在SQLite中,锁和并发控制机制都是由pager_module模块负责处理的,如ACID(Atomic, Consistent, Isolated, and Durable).在含有数据 ...

  8. SQLite学习手册(临时文件)

    一.简介: 尽管SQLite的数据库是由单一文件构成,然而事实上在SQLite运行时却存在着一些隐含的临时文件,这些临时文件是出于不同的目的而存在的,对于开发者而言,它们是透明的,因此在开发的过程中我 ...

  9. SQLite学习手册(数据表和视图)

    一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则.但是对于一些SQLite特有的规则,我们会给予额外的说明.注:以 ...

最新文章

  1. BGP local-preference MED属性实验
  2. Git入门教程(上)
  3. pythonhistogram教程_OpenCV-Python 直方图-4:直方图反投影 | 二十九
  4. 怎么设置ppt页面的长度和宽度_将PPT里的字弄很小,PPT就有逼格吗?
  5. mysql登录不了_登录不了MySQL的解决方法
  6. 在PEA上海做演讲主题:大型、高负载网站架构和应用初探
  7. Oracle和sql语言,SQL语言的四种类型和ORACLE运算符
  8. TCP / IP攻击:ARP缓存中毒的基本原理、TCP序列号预测和TCP重置攻击
  9. Java第二次作业程序设计作业
  10. 文本摘要生成 - 基于注意力的序列到序列模型
  11. Go语言实现线程安全访问队列
  12. Linux驱动总结3- unlocked_ioctl和堵塞(waitqueue)读写函数的实现
  13. 2021中青杯C题-在线教学的分析与研究
  14. java 区号_区号查询示例代码
  15. zookeeper之ZkClient使用,java电子书阅读器开发
  16. js获取浏览器默认语言设置并自动跳转
  17. 2022年全球程序员收入报告出炉:国内程序员人均56w年薪。。网友说:我拖后腿了!...
  18. php连接sqlserver数据库
  19. 2.1 良好的代码格式
  20. 应用机器学习 Applied Machine Learning (AML) ppt2

热门文章

  1. linux查看目录访问权限,Linux文件访问权限
  2. 斗鱼实名认证 mysql_斗鱼扩展--DouyuRoom使用说明(十四)
  3. oppoa9处理器怎么样_oppoA9究竟怎么样?看看与三星A60元气版的对比吧
  4. js如何判断当前文本的输入状态——中文输入法的那些坑
  5. SQLSERVER 2014 SP1 的服务器 日志文件无法收缩的处理
  6. EF 学习 实用脚本
  7. 20155313 2016-2017-2 《Java程序设计》第二周学习总结
  8. 利用Struts拦截器限制上传图片的格式和大小
  9. linux系统中安装和使用rz/sz命令详解
  10. 麦迪时刻的视频和图片