Questions tagged «indexing»

10
添加数据库索引是否过早优化?
今天,我的一位同事建议我们仔细检查应用程序中的所有查询并相应地添加索引。 我觉得这是过早的优化,因为我们的应用程序尚未发布。我建议我们上线后监视慢速查询,然后相应地添加索引。 在设计数据库时,一般的共识是什么?每次编写新查询时都应添加匹配的索引吗?还是只监视并查看进展情况更好?

1
btree和rtree索引有什么区别?
我在MySQLWorkbench上注意到,您可以在进行工程前设计之前选择如何存储索引。存储类型为: BTREE 实时树 杂凑 经过研究,我发现了一些非常重要的信息,因此我正在寻找有关这些信息之间的区别和/或为什么应该选择一个而不是另一个的实用信息。 另外,我以前从未选择过存储类型,因此我假设MySQL正在选择默认存储类型(BTREE?)

7
如何快速搜索数据库中非常大的字符串/记录列表
我有以下问题:我的数据库包含超过200万条记录。每个记录都有一个字符串字段X,我想显示一个记录列表,其中字段X包含某个字符串。每条记录的大小约为500字节。 更具体地说:在我的应用程序的GUI中,我有一个文本字段,可以在其中输入字符串。在文本字段上方,我有一个表,显示与文本字段中的字符串匹配的(前N个,例如100个)记录。当我在文本字段中键入或删除一个字符时,表内容必须即时更新。 我想知道是否存在使用适当的索引结构和/或缓存的有效方法。如上所述,我只想显示与查询匹配的前N个项目。因此,对于足够小的N来说,从数据库中加载匹配项应该不是大问题。此外,在主存储器中缓存项目可以使检索更快。 我认为主要问题是在给定模式字符串的情况下如何快速找到匹配项。我可以依靠某些DBMS工具,还是必须自己构建一些内存索引?有任何想法吗? 编辑 我已经进行了第一次实验。我已将记录分为不同的文本文件(每个文件最多200条记录),并将文件放在不同的目录中(我使用一个数据字段的内容来确定目录树)。我最终得到大约40000个目录中的大约50000个文件。然后,我运行Lucene来索引文件。使用Lucene演示程序搜索字符串非常快。拆分和建立索引花费了几分钟:对于我来说这完全可以接受,因为它是我要查询的静态数据集。 下一步是将Lucene集成到主程序中,并使用Lucene返回的命中将相关记录加载到主存储器中。

8
我的顺序收集应该从索引0还是索引1开始?
我正在为具有多个通道的设备创建对象模型。客户和我之间使用的名词是Channel和ChannelSet。(“集合”在语义上不准确,因为它是有序的,而正确的集合不是。但这在不同的时间是个问题。) 我正在使用C#。这是一个用法示例ChannelSet: // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 一切都是花花公子。 但是,客户端不是程序员,它们绝对会被零索引混淆-第一个通道是它们的通道1。但是,为了与C#保持一致,我想将ChannelSet索引从零开始。 当我的开发团队和客户进行交互时,这肯定会导致他们之间的脱节。但更糟糕的是,在代码库中如何处理此问题的任何不一致都是潜在的问题。例如,这是一个UI屏幕,最终用户(根据1个索引进行思考)正在编辑频道13: 该Save按钮最终将产生一些代码。如果ChannelSet索引为1: channels.GetChannel(13).SomeProperty = newValue; // notice: 13 或如果它的索引为零: channels.GetChannel(12).SomeProperty = newValue; // notice: 12 我不确定如何处理。我觉得这是个好习惯,即使有序的,整数索引的事物列表(ChannelSet)与C#Universe中的所有其他数组和列表接口保持一致(通过零索引ChannelSet)。但是,然后,UI和后端之间的每一段代码都需要翻译(减1),我们都知道隐患和常见的一对一错误已经是多么的隐秘。 …

6
数据库规范化后是否还需要索引
完成良好的归一化之后,还需要对表建立索引吗?这将如何影响性能?良好的规范化后,它甚至会以某种方式影响性能吗? 如果您已经具有主键和外键,通常会索引哪些列? 规范化数据库似乎已经有效。但是,我可能已经跳过了索引如何影响数据库。这仅在使用查询时有效吗?如何运作/执行并改善数据库?

5
重复的四叉树
我正在实现一个四叉树。对于那些不知道此数据结构的人,我包括以下简短描述: 四叉树是一种数据结构,在欧几里得平面中就像3维空间中的八叉树一样。四叉树的常见用途是空间索引。 总结一下它们是如何工作的,四叉树是一个集合(假设这里是矩形),具有最大容量和一个初始边界框。当尝试将元素插入达到最大容量的四叉树中时,该四叉树被细分为4个四叉树(其几何表示将比插入前的树小四倍)。每个元素根据其位置重新分配在子树中。使用矩形时的左上边界。 因此,四叉树要么是叶子,其元素数量少于其容量,要么是一棵有4个四叉树作为孩子的树(通常是西北,东北,西南,东南)。 我担心的是,如果您尝试添加重复项,可能是同一元素多次或具有相同位置的多个不同元素,则四叉树在处理边缘时存在一个基本问题。 例如,如果您使用容量为1的四叉树并将单位矩形作为边框: [(0,0),(0,1),(1,1),(1,0)] 然后您尝试插入两次以其左上边界为原点的矩形:(或类似地,如果尝试在容量为N> 1的四叉树中将其插入N + 1次) quadtree->insert(0.0, 0.0, 0.1, 0.1) quadtree->insert(0.0, 0.0, 0.1, 0.1) 第一次插入不会有问题: 但是然后第一个插入将触发细分(因为容量为1): 因此,两个矩形都放在同一子树中。 然后,这两个元素将到达相同的四叉树并触发细分… 依此类推,依此类推,细分方法将无限期地运行,因为(0,0)始终位于所创建的四个子树中的同一子树中,这意味着将发生无限递归问题。 有可能有重复的四叉树吗?(如果没有,则可以将其实现为Set) 我们如何解决这个问题而又不完全破坏四叉树的体系结构?

1
轻量级文档索引,可处理少于25万条潜在记录
最近,我发现自己对文档索引引擎的局限感到恼火。我正在开发一个小型网站,需要一些相当强大的搜索功能,但是由于它们的硬件限制,我无法部署Lucene式的解决方案(例如Solr或ElasticSearch,就像我通常那样)来满足这种需求。 即便如此,尽管我需要处理一些数据库密集型的复杂数据和计算,但我并不需要处理超过25万条潜在记录。仅仅部署一个Solr或ES实例来解决这个问题似乎是一种浪费。 经过考虑,这似乎是一个相当大的问题。大多数人仅使用SQL处理搜索需求。他们只是对数据运行SQL查询,仅此而已。他们的搜索能力最终也很糟糕。 在某些系统(尤其是共享主机)上进行全面的通配符全文搜索可能会非常缓慢,并且会使数据库陷入瘫痪,特别是在您具有复杂的查询和大量联接的情况下。 您最终只能对用户的单个请求执行多个查询。您可能会通过越来越复杂的查询来解决此问题,但请参阅上一点。 全文引擎中通常缺少功能。 数据库具有需要部署为服务器的相同问题,然后出现SQLite,突然我们可以部署一个独立包含在单个文件中的数据库。我的Google搜索没有任何结果-想知道是否存在类似这样的内容用于全文索引/搜索。 在决定是否实现轻量级文档索引(例如,如对另一个问题的回答中所述)或在这些情况下继续使用SQL 时应考虑哪些因素?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.