Sqlite是一个很优秀的数据库,不仅体积小,多平台支持,而且数据库具有单个文件,方便在不同平台上快速部署等很多优势。

关于Sqlite的性能,总是最具有争议的地方。不过之前也在网上看到过有人把sqlite和Mysql做过对比,然后呢,在配置相似的情况下得出的结果是sqlite和mysql的IO性能实际上相差无几。

得到这样的结论也不难想象,因为sqlite和mysql都是基于文件的数据库,IO性能最终还要受到磁盘的IO速度的限制。因此,在mysql没有使用各种加速引擎的情况下,两者的性能的确不相上下。

在之前的一片文章中提到,给sqlite的字段增加索引可以大大提高查找的速度。今天这里再引入另外一个方法,就是使用Sqlite自带的全文分词索引。

这里说的全文分词索引并不是指给sqlite的某个表上的某个列建立索引(index),而是指类似与谷歌、百度、微软bing 类似的搜索引擎的“全文分词索引”(full-text index),虽然它们使用了相似的技术,但它们本身是完全不同的东西。

测试

Sqlite官方文档(http://www.sqlite.org/fts3.html)就描述了使用Sqlite自带的FTS3 和 FTS4 虚拟表模型来进行全文分词检索的方法。并且举了一个例子,在一个具有50万左右条目的表中来对比全文索引和普通表的like搜索法的对比:

首先是建立两个表:地一个是虚拟表,第二个是普通的表

CREATE VIRTUAL TABLE en1 USING fts3(content TEXT);     /* FTS3 table */
CREATE TABLE en2(content TEXT);                        /* Ordinary table */

第二步,这时候这个数据库中已经有了超过50万的数据条目
然后分别从两个表中匹配相同的数据

SELECT count(*) FROM en1 WHERE content MATCH 'linux';  /* 0.03 seconds */
SELECT count(*) FROM en2 WHERE content LIKE '%linux%'; /* 22.5 seconds */

结果

结果是,使用了虚拟表的全文检索用了0.03s,而普通的表则用了22.5秒。性能差了将近一千倍。
但是值得注意的一个结果是使用Match 语句匹配出来的结果和使用like ‘%%’ 匹配出的结果完全不同,很典型的匹配结果是,like语句可以匹配出像”linuxophobe” 或 “EnterpriseLinux”这样的结果,而使用match 语句只能匹配出包含 linux 这样单词的结果。

但是在数据量很大的时候,检索的速度反而更加重要。

提高数据库查询的速度的方法有很多种,本文介绍的全文检索只是一种思路。更加复杂的系统必须使用更加独立的方法实现全文检索。

本文地址:http://tweetyf.org/2013/04/sqlite_optimization_fulltext_index.html

Sqlite优化记录:使用全文索引加快检索速度-转相关推荐

  1. 为什么引入文件索引节点能大大加快目录检索速度

    首先弄清楚什么是索引结点(inode)? 一般来说,面试不会问 inode .但是 inode 是一个重要概念,是理解 Unix/Linux 文件系统和硬盘储存的基础. 理解inode,要从文件储存说 ...

  2. mysql怎么加快搜索_优化mysql数据库 提高检索速度

    在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信 ...

  3. html优化网站的方法,利用HTML优化加快网页速度方法介绍

    减少web页面下载时间的关键就是设法减小文件大小.当多个页面共用一些成分内容时,就可以考虑将这些公用部分单独分离出来.比如:我们可以将多个HTML页面都用到的脚本程序编写成独立存在的.js文件,然后再 ...

  4. win7计算机怎么优化驱动器,Win7优化电脑加快关机速度的方法技巧

    原标题:Win7优化电脑加快关机速度的方法技巧 在使用Win7系统的过程中,很多用户都遇到过关机速度慢的问题,怎么办呢?电脑的关机速度慢和开机速度慢其实是一个道理,一般是由于磁盘.电源等问题造成的.这 ...

  5. Window 10优化:加快PC速度的13种方法

    1. 更改电源设置  如果您使用Windows 10的"省电"计划,则会降低PC的速度.该计划会降低PC的性能以节省能源.(甚至台式计算机通常都有"省电"计划. ...

  6. 简单几步优化你的windows,加快开机速度(重装windows之后要做的几件事)

    每个人都想要让自己的系统运行得快一些,开机快一些,我就来说说我自己的经验,我使用的系统是windows8.1,当然这有些方法也适用于其他的系统,我每次重装完系统之后第一件事就是下面几步,当然重装系统之 ...

  7. mysql text 查询速度_数据库学习之让索引加快查询速度(四)

    数据库学习之让索引加快查询速度 目录 索引简介 mysql的索引分类 创建索引 添加与删除索引 索引简介 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构. ...

  8. 建立索引为什么能加快查询速度 【转】

    建立索引为什么能加快查询速度 这是因为,创建索引可以大大提高系统的性能.第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. ...

  9. 字节跳动发布最新音乐检索系统ByteCover2,检索速度提高八倍

    每天给你送来NLP技术干货! 机器之心发布 机器之心编辑部 翻唱识别(CSI)是音乐信息检索(MIR)领域的一项重要任务,在歌曲搜索,音乐分发,曲库整理,智能推荐等场景下有着重要作用,被誉为下一代音乐 ...

最新文章

  1. java opengl书_GitHub - cy-cyx/OpenGlDome: OpenGl的使用练习(安卓 Java opengl3.0)
  2. 微型计算机中数据总线既可以传输数据信息,计算机考试题库精简版
  3. 2019\Province_C_C++_B\试题F-特别数的和
  4. 【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等
  5. 谷歌发布Edge TPU芯片,云上模型本地运行丨附尝鲜地址
  6. 日期对象Date的计算
  7. 推荐系统的常用算法概述
  8. 从DWG导入SKP后的封面问题
  9. kindle paperwhite2 root 密码修改方法
  10. 00.Spring源码编译
  11. 基金与私募基金概念解析:共同基金、单位信托、投资信托计划、券商集合理财、基金专户理财
  12. 解决java下载文件中文文件名乱码问题(ie,谷歌,火狐)
  13. 上海科学家研制出新型“耐火宣纸”
  14. crt远程连接linux目录的颜色不显示,SecureCRT连接linux设置vim显示颜色
  15. Mysql基础知识01
  16. 【知识小集】☞Excel之VBA编程语句集300句
  17. 什么是神经元网络控制?,神经网络控制结构包括
  18. 基于Python的聊天室
  19. 嵌入式软件硬件比例_嵌入式做硬件方向好还是软件方向好?
  20. 黑客常用SQL注入绕过技术总结!(冰河吐血整理,建议收藏)

热门文章

  1. iOS5 UIKit新特性
  2. 查看进程占用内存cpu信息,Linux命令—TOP
  3. cursor-spacing 软键盘和input的距离
  4. mini2440 貌似复杂的mmu
  5. 创业团队如何在低成本的情况下保护网站安全
  6. java snmp全面开发解决方案(web service snmp网关、代理snmp网关、网络拓扑发现、SNMP数据采集等)...
  7. 阵列卡不能格式化磁盘问题所在
  8. “机智号”成功试飞火星,但它使用的开源软件安全吗?
  9. 4个开源 TCP/IP 栈被曝33个漏洞,数百万智能和工业设备受影响
  10. 黑客可利用 TeamViewer 缺陷远程窃取系统密码