Sqlite数据库中如何优化like查询

 Sqlite数据库中like的查询和Mysql一级Oracel等数据库一样,可以进行模糊查询,但是在Sqlite数据库中like查询是不会走索引的,当数据库数据库较大时用模糊查询就会显得特别的慢。

  因此,如何才能让模糊查询走索引呢?下面提供一个找了很久很久才找到的方法,绝对比网上提供的那些好用的多。

如:where  name   like ‘W%‘  可以转换成   where  name >=‘W‘  and name<=‘Wa‘  
  //大于等于本身,小于等于本身加a    此种转换只使用最后一位是字母的
如:where name like ‘我%‘  可以转换成 where name >=‘我‘ and  name <=‘戒‘
  //大于等于本身,小于等于最后一个字符的对应的Unicode编码加一对应的汉字
  这是什么原理呢,其实是将‘我’转换成Unicode编码(\u6211),然后加一变成(\u6212),再讲\u6211转换为对应的汉字则变成‘戒‘

注意:转换成unicode编码后,加一是按照16进制进行加一,并不是十进制,若转换为unicode编码后最后一位是9则加一下一位变成a

附加:十六进制

0 1 2 3 4 5 6 7 8 9 a b c d e f

原文地址:https://www.cnblogs.com/zblwyj/p/11772710.html

时间: 2024-08-01 00:07:34

Sqlite数据库中如何优化like查询的相关文章

关于SimpleCursorAdapter在sqlite数据库中取数据报错 : java.lang.IllegalArgumentException: column &#39;_id&#39; does not exist

_id列不存在 需要创建一个 id列 因为SQLlite数据库 的onCreate方法是在数据库不存在的时候才调用所以我们需要清除一下这个app 的数据 将数据清空 关于SimpleCursorAdapter在sqlite数据库中取数据报错 : java.lang.IllegalArgumentException: column '_id' does not exist

网络采集软件核心技术剖析系列(6)---将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示(将之前的内容综合到一起)

一 本系列随笔目录及本节代码下载 开发环境:VS2008 本节源码位置:https://github.com/songboriceboy/GatherAllStoreInDB 源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com/songboriceboy/GatherAllStoreInDB 系列文章提纲拟定如下: 1.如何使用C#语言获取博客园某个博主的全部随笔链接及标题:2.如何使用C#语言获得博文的内容:3.使用C#

Oracle数据库中的优化方案

来自: http://woainichenxueming.iteye.com/blog/726541 一. 优化oracle中的sql语句,提高运行效率 1. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名, FROM子句中写在最后的表(基础表 driving table)将被最先处理, 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 如: 表T_USER有16384条记录, 表T_DEPARTME

sqlite数据库中第一条数据查不出来!

/** *  * Title: selectAllPhone  *Description:查询所有的Phone对象  * @return  * @see * com.sms.ntlm.dao.PhoneDao#selectAllPhone() */ @SuppressLint("SimpleDateFormat") @SuppressWarnings("deprecation") @Override public List<Phone> selectAl

Android 代码实现查看SQLite数据库中的表

前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的函数,对于数据库的查看很不方便,于是就写了一下查看数据库表的方法代码. 代码实现 import java.util.Arrays; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteData

MySQL数据库中SQL对日期查询相关操作

有时我们面要统计一下数据库中指定日期的数据,如常用的,今天,昨天,明天,本周.上周.本月.上个月份的数据,还有对日期的加减, 除了我们可以使用strtotime来算还可以参考下面方法. SQL减去指定天数 SELECT * from 表名 where DATE_FORMAT(时间字段,"%Y-%m-%d") = DATE_ADD(输入时间,INTERVAL -1 DAY); /** 如果需要加指定天数把-1改为指定天数即可 */ 今天  select * from 表名 where t

SQLite数据库中获取新插入数据的自增长ID

SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID. 我这里用事务,把插入和查询语句通过ExecuteReader一起提交. 实现代码 public bool Insert(string topic, string key, string value, out int id) { DbProviderFactory factory = SQLiteFactory.Instance; using (DbConnection conn = fa

Sqlite数据库中索引的使用、索引的优缺点[转]

原文链接1   原文链接2 3. 索引的种类 1)聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同.因为数据的物理顺序只能有一种,所以一张表只能有一个聚集索引.如果一张表没有聚集索引,那么这张表就没有顺序的概念,所有的新行都会插入到表的末尾.对于聚集索引,叶节点即存储了数据行,不再有单独的数据页.就比如说我小时候查字典从来不看目录,我觉得字典本身就是一个目录,比如查裴字,只需要翻到p字母开头的,再按顺序找到e.通过这个方法我每次都能最快的查到老师说的那个字,得到老师的表扬. 2)非聚集索引

SQLserver数据库中关于递归的查询使用

度量快速开发平台数据库支持sqlserver数据库,我们之前习惯的oracle递归查询用的 start with dept_id=1000 connect by prior dept_id=upper_id的方式就不灵了.比如我们的组织机构里面有很多下级机构及部门,要查询出登录人所在的机构,并列出该机构下所有机构和部门.Sqlserver写法如下:  with NewTable as ( select a.dept_id,a.dept_name,a.upper_id,a.tree_code,a.