Mysql 类似SQL(ite)的优化(或任何其他数据库)

Mysql 类似SQL(ite)的优化(或任何其他数据库),mysql,sql,database,sqlite,relational-database,Mysql,Sql,Database,Sqlite,Relational Database,对于一个包含一个文本单字列且最多有100万行的表,优化此查询的最佳方法是什么: 选择名称 从搜索索引 其中名称为“%q%u%e%r%y%” 逐案订购 当名称如“query”时,则为1 当名称如“query%”时,则为2 当名称为“%query”时,则为3 当名称为“%query%”时,则为4 当名称如“q%u%e%r%y%”时,则为5 其他6 终止 目前,我正在使用SQLite。然而,我愿意尝试任何免费的数据库系统和任何表结构 我需要一个Mac OS X应用程序,它将用于搜索文档集的索引。在给定

对于一个包含一个文本单字列且最多有100万行的表,优化此查询的最佳方法是什么:

选择名称 从搜索索引 其中名称为“%q%u%e%r%y%” 逐案订购 当名称如“query”时,则为1 当名称如“query%”时,则为2 当名称为“%query”时,则为3 当名称为“%query%”时,则为4 当名称如“q%u%e%r%y%”时,则为5 其他6 终止 目前,我正在使用SQLite。然而,我愿意尝试任何免费的数据库系统和任何表结构


我需要一个Mac OS X应用程序,它将用于搜索文档集的索引。在给定的时间段内不会有很多查询运行,因此并发使用并不是一个真正的问题。

我所知道的优化查询的实用方法没有%q%u%e%r%y%这样的通用方法。但这几乎肯定不是一个有用的查询,因为如果索引列甚至有点大,它最终将生成大量不相关的匹配。例如,您的问题的文本将与外星人入侵相匹配,因为它恰好包含按该顺序排列的字母


SQLite扩展在这里可能很有趣——它将允许您对列中出现的单词进行索引。对于您描述的任务,它应该是完美的。

我已经研究了FTS,它只能匹配整个单词,而不能进行部分匹配。我处理的是单个单词类、方法名的索引,因此查询确实会返回我需要的结果,我需要部分匹配,并且orderby确保我得到相关的内容。对我来说,使用FTS就像使用“查询”这样的WHERE名称一样,因为我处理的是每行单个单词,而不是文本片段。名称是否有最大长度?此外,表格内容是静态的还是相对静态的?您是否愿意执行预计算以加快检索速度?此外,在这种情况下,您是否愿意接受查询中搜索词的最小长度?名称的最大长度我估计大约为40-50个字符。基本上,我所做的是构建索引,然后在代码中创建表。创建表时,我确切地知道名称的最大长度,并且创建后表中的所有条目保持不变。最小长度为1。但是,如果我可以针对长度>2或>3的查询对其进行优化,否则就不进行优化,这很好。请明确:数据库中的所有条目在数据库的整个生命周期内都保持不变。所有这些条目都被插入到代码中,我已经一个接一个地检查了它们。在数据库创建/插入时,对每个值执行大量计算不是问题。您能详细说明我可以执行哪些预计算吗?