我有两张桌子:
~ 100k records
CREATE TABLE `words` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`word` varchar(20) COLLATE utf8_slovak_ci NOT NULL,
`reverse` varchar(20) COLLATE utf8_slovak_ci NOT NULL
PRIMARY KEY (`id`),
UNIQUE KEY `word ` (`word`),
UNIQUE KEY `reverse ` (`reverse`),
) ENGINE=InnoDB AUTO_INCREMENT=127531 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci
~ 2M records
CREATE TABLE `products_words` (
`product` int(11) NOT NULL,
`word` varchar(20) COLLATE utf8_slovak_ci NOT NULL,
UNIQUE KEY `pw` (`product`,`word`) USING BTREE,
KEY `word` (`word`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci
现在,如果有人正在寻找关键字“car”,它会看看下面的表词:
从单词中选择id,单词如“car%”或反向如“rac%”
这样的单词非常快。
问题是,当我想用这个词得到独一无二的产品时。这些表与words.id和products_words.word连接。
我使用了以下SQL:
SELECT products_words.product
FROM products_words
INNER JOIN words
ON products_words.word=words.id
WHERE words.word like "car%" or words.reverse like "rac%"
GROUP BY products_words.product
我不明白它为什么要看1799211行?我需要告诉MySql先看words表,选择F.E。10个ID和给我带来独特的产品与这些ID的Word。
我做错了什么?
谢谢你。
products_words.word=words.id上的似乎完全错误--
主键(单词)word
是varchar
但id
是int。是否需要有
ID?为什么不简单地在
单词上使用?
或
不能很好地优化。切换到联合
:
SELECT DISTINCT pw.product
FROM ( ( SELECT id FROM words WHERE word LIKE 'car%' )
UNION ALL
( SELECT id FROM words WHERE word LIKE 'rac%' )
) AS w
JOIN products_words AS pw
ON pw.word = w.id -- This needs fixing!! perhaps `w.word`??
问题内容: 我们有两个节点的集群(私有云中的VM,64GB的RAM,每个节点8个核心CPU,CentOS),几个小索引(约100万个文档)和一个大索引,约有2.2亿个文档(2个分片,170GB)的空间)。每个盒上分配了24GB的内存用于elasticsearch。 文件结构: 运行以下查询大约需要1-2秒: 我们是在此时达到硬件极限,还是有办法优化查询或数据结构以提高性能? 提前致谢! 问题答案:
我对DS和算法相当陌生,最近在一次工作面试中,我被问到一个关于性能调优和代码的问题。我们有一个包含数十亿个条目的数据结构,我们需要在该数据结构中搜索特定的单词。那么,我们可以使用哪种Java特性/库在尽可能快的时间内进行搜索呢? 当时我想不出确切的答案,所以我写道: 我们可以将值存储在地图中,并在地图中搜索单词(但在如何确定地图中的键值对方面遇到了困难) 我如何才能理解这个问题的确切答案,以及什么
我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。
本文向大家介绍SQLServer地址搜索性能优化,包括了SQLServer地址搜索性能优化的使用技巧和注意事项,需要的朋友参考一下 这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享。 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内。 1.2 数据库地址表结构和数据: 表TBAddress 表数据 1.3 例子:
我有以下格式的弹性搜索文档 } } 我的要求是,当我搜索特定字符串(string.string)时,我只想获得该字符串的FileOffSet(string.FileOffSet)。我该怎么做? 谢谢
最大ngram 36 在速度和内存方面,这会得到真正糟糕的加班吗?有没有更好的方法来部分搜索UUID?例如,我有7e222584-0818-49b0-875b-2774f4bf939b,我希望能够使用9b0搜索它