栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

需要正确索引包含许多要搜索字段的表的建议

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

需要正确索引包含许多要搜索字段的表的建议

我有一张工作在同一张桌子上的表,有很多列和1000种不同的选择方式。这是一场噩梦。但是,我确实发现,经常使用某些过滤器组合。我将为那些索引创建索引,而其他索引则很少用于缓慢运行。在MSSQL中,我可以运行查询以向我展示针对数据库运行的最昂贵的查询,mySQL应该具有类似的功能。有了它们之后,我将创建一个索引,该索引覆盖各列以加快它们的速度。最终,您将获得90%的覆盖率。我个人永远也不会再设计像这样的桌子,除非我有一个AK47指向我。(我的索引比表中的数据大3倍,如果您需要添加一堆或记录,这是非常不酷的)。我不确定我该如何重新设计桌子,

用户表(用户ID,名称)

1, Lisa2, Jane3, John

用户属性表(UserID,AttributeName,Attributevalue)

1, EYES, Brown1, GENDER, Female2, EYES, Blue2, GENDER, Female3  EYES, Blue3, GENDER, Male

这样可以更快地识别属性,但使查询不那么容易编写。

SELECt UserID, COUNT(*) as MatchingAttributesFROM   UserAttributes WHERe  (UserAttributes.AttributeName = 'EYES' AND UserAttributes.Attributevalue = 'Blue') OR       (UserAttributes.AttributeName = 'GENDER' AND UserAttributes.Attributevalue = 'Female')

这应该返回以下内容

UserID, MatchingAttributes1, 12, 23, 1

然后,您需要做的就是向查询添加HAVINg COUNT(*)=
2以仅选择匹配的ID。可以从中进行选择,但是它还提供了一个简洁的功能,例如您对10个属性进行过滤,并返回所有具有10个匹配项的属性。很酷,但说没有一个100%符合。您可能会说,我没有找到匹配的,但这些匹配有10个匹配中的9个或90%匹配。(请确保,如果我搜索一只蓝眼睛的金发女性,我不会收到一条消息,说找不到任何信息,但以下是最接近的匹配项,其中包含蓝眼睛的金发女郎,其匹配分数为60%。这将是非常不酷)

如果选择拆分表,还有更多事情需要考虑,例如如何将属性存储为数字,日期和文本在单个列中?还是这些单独的表或列。宽表或拆分表都不容易回答。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号