SQLite教程(五):索引和数据分析/清理

 更新时间:2015年05月04日 16:11:48   投稿:junjie  
这篇文章主要介绍了SQLite教程(五):索引和数据分析/清理,本文讲解了创建索引、删除索引、重建索引、数据分析、数据清理等内容,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

一、创建索引:

    在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教程(十一):临时文件

    SQLite教程(十一):临时文件

    这篇文章主要介绍了SQLite教程(十一):临时文件,本文讲解了七种临时文件并对它们一一具体说明,并相关的编译时参数和指令、其它优化策略等内容,需要的朋友可以参考下
    2015-05-05
  • 初识SQLITE3数据库

    初识SQLITE3数据库

    本文主要讲诉Sqlite数据库的一些基本概念以及SQLite的优势,需要的朋友可以参考下
    2014-08-08
  • SQLITE3 使用总结

    SQLITE3 使用总结

    Sqlite3 的确很好用。小巧、速度快。但是因为非微软的产品,帮助文档总觉得不够。这些天再次研究它,又有一些收获,这里把我对 sqlite3 的研究列出来,以备忘记。也希望能对大家有所帮助。
    2014-08-08
  • SQLite教程(五):索引和数据分析/清理

    SQLite教程(五):索引和数据分析/清理

    这篇文章主要介绍了SQLite教程(五):索引和数据分析/清理,本文讲解了创建索引、删除索引、重建索引、数据分析、数据清理等内容,需要的朋友可以参考下
    2015-05-05
  • SQLite 实现if not exist 类似功能的操作

    SQLite 实现if not exist 类似功能的操作

    这篇文章主要介绍了SQLite 实现if not exist 类似功能的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • python之sqlalchemy创建表的实例详解

    python之sqlalchemy创建表的实例详解

    这篇文章主要介绍了数据库之sqlalchemy创建表的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • 一篇文章带你掌握SQLite3基本用法

    一篇文章带你掌握SQLite3基本用法

    SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,下面这篇文章主要给大家介绍了关于SQLite3基本用法的相关资料,需要的朋友可以参考下
    2022-06-06
  • 基于sqlite特殊字符转义的实现方法

    基于sqlite特殊字符转义的实现方法

    本篇文章是对sqlite特殊字符转义的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • SQLite3的绑定函数族使用与其注意事项详解

    SQLite3的绑定函数族使用与其注意事项详解

    这篇文章主要介绍了SQLite3的绑定函数族使用与其注意事项的相关资料,文中通过示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • sQlite常用语句以及sQlite developer的使用与注册

    sQlite常用语句以及sQlite developer的使用与注册

    sQlite数据库对大家来说应该都不陌生,下面这篇文章主要给大家介绍了关于sQlite常用语句以及sQlite developer使用与注册的相关资料,文中通过示例代码与图片给大家介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面来一起看看吧。
    2017-10-10

最新评论

?


http://www.vxiaotou.com