vb.net - SQLite Date索引未显示任何性能改进

标签 vb.net sqlite

我的SQLite数据库有超过500,000行。作为新手,我刚刚开始在VB.net应用程序中使用其他索引,并获得了一些惊人的速度改进:)。

当我索引表的日期列时,这些改进不会被复制。我将在下面包含一些代码片段详细信息,并希望得到有关我可能做错了什么的任何输入。

    'When creating the date column in DB (amongst others) 
oMainQueryR.CommandText += "RDate DATE, "

'creating index
oMainQueryR.CommandText = "Create INDEX main.iRDate ON DatabaseRows(RDate)"   
      oMainQueryR.ExecuteNonQuery()

'Storing the Data
.Parameters.Add(":Rdate", DbType.Date)
cmdSQLite.Parameters(":Rdate").Value = CDate(TextSplit(1)).ToString("dd/MM/yyyy")



'SQL Call to retrieve data
 oMainQueryR.CommandText = "SELECT * FROM DatabaseRows " _
                            & "WHERE DATE([RDate]) BETWEEN DATE(:StartDate) AND DATE(:EndDate) " _


调用一切正常,并且我得到了正确的功能,但是当我对RDate列的速度进行索引时,它没有任何改善。

我应该提到索引似乎是正确创建的

希望有帮助,谢谢

最佳答案

SQLite不会使用索引进行此查找,因为您不是在查找列值而是函数调用的结果,而且索引中存储的不是值DATE(RDate)

从查询中删除DATE函数;除了阻止优化外,它在您的查询中不执行任何操作:

... WHERE RDate BETWEEN :StartDate AND :EndDate


要检查SQLite是否在查询中实际使用了索引,请使用EXPLAIN QUERY PLAN

请注意,dd/MM/yyyy不是SQLite的supported date formats之一;您必须使用yyyy-MM-dd进行字符串比较才能正常工作。

(对于这样的查询,将日期存储为字符串还是数字都没有关系。)

关于vb.net - SQLite Date索引未显示任何性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846044/

相关文章:

vb.net - 计算下个月的最后一天

.net - Crystal Reports 错误 : cannot find CrystalDecisions. Windows.Forms 版本 10.2.3600

VB.net通过扩展方法避免跨线程异常

mysql - 如何建模和检索具有公共(public)表的数据?

android - 为什么 StrictMode 不捕获 SQLite 的读/写操作?

asp.net - 你能告诉我为什么我收到 `The GridView ' GridView 1' fired event RowUpdating which wasn' t Handling.` 错误消息

c# - .net 中的任意精度浮点类型。有什么图书馆允许这样做吗?

java - 在数据库中添加图像

php - 如何让sqlite查询在mysql上工作?

android - Sugar ORM 没有这样的表异常