- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一个表来标记搜索
CREATE TABLE tsvector_business_objects (
id int4 NULL,
"type" varchar NULL,
value varchar NULL,
label varchar NULL,
synonyms _text NULL,
label_tsvector tsvector NULL
);
CREATE INDEX label_tsvector_idx ON tsvector_business_objects USING gin (label_tsvector);
CREATE INDEX lower_case_synonym_tsvector_business_objects ON tsvector_business_objects USING gin (synonyms);
CREATE INDEX txt_label_tsvector_business_objects ON tsvector_business_objects USING gin (to_tsvector('english'::regconfig, lower((label)::text)));
CREATE INDEX txt_value_tsvector_business_objects ON tsvector_business_objects USING gin (to_tsvector('english'::regconfig, lower((value)::text)));
CREATE INDEX type_tsvector_business_objects ON tsvector_business_objects USING btree (type);
CREATE INDEX type_value_label_lower_case_tsvector_business_objects ON tsvector_business_objects USING btree (lower((type)::text), lower((value)::text), lower((label)::text));
我在数据中有一些像 OID-0127820 这样的文本,当我使用 ts_vector 搜索 token OID 时,Postgres 总是使用序列扫描而不是使用 GIN 索引。
有 500k strip OID 文本的记录。但是当我禁用序列扫描时,正在使用索引
SET enable_seqscan = ON;
explain (analyze,verbose,buffers,timing,costs)
SELECT TYPE, value, label, synonyms, ((to_tsvector('english', lower(value)) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0) OR (lower(value) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0) OR ((to_tsvector('english', lower(label))) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0) OR (lower(label) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0)) as partial_value_label_match, (lower(value) ='OID' OR lower(label) ='OID') as exact_value_label_match, (synonyms @> '{OID}') is true as synonym_match FROM tsvector_business_objects AS business_objects_alias
WHERE synonyms @> '{OID}'
OR (to_tsvector('english', lower(value)) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0)
OR (lower(value) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0)
OR ((to_tsvector('english', lower(label))) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0)
OR (lower(label) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0) OR (lower(value) ='OID' OR lower(label) ='OID')
limit 30
QUERY PLAN |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
Limit (cost=0.00..41.91 rows=30 width=82) (actual time=3804.998..3805.163 rows=30 loops=1) |
Output: type, value, label, synonyms, (((to_tsvector('english'::regconfig, lower((value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((label)::text)) @@ '''oid'''::tsquery))), (((lower((value)::text) = 'OID'::text) OR (lowe|
Buffers: shared hit=21217 |
-> Seq Scan on mdlz_performancebenchmarking.tsvector_business_objects business_objects_alias (cost=0.00..717278.98 rows=513425 width=82) (actual time=3804.997..3805.159 rows=30 loops=1) |
Output: type, value, label, synonyms, ((to_tsvector('english'::regconfig, lower((value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((label)::text)) @@ '''oid'''::tsquery)), ((lower((value)::text) = 'OID'::text) OR (l|
Filter: ((business_objects_alias.synonyms @> '{OID}'::text[]) OR (to_tsvector('english'::regconfig, lower((business_objects_alias.value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((business_objects_alias.label)::tex|
Rows Removed by Filter: 575042 |
Buffers: shared hit=21217 |
Planning time: 0.226 ms |
Execution time: 3805.210 ms
SET enable_seqscan = OFF;
explain (analyze,verbose,buffers,timing,costs)
SELECT TYPE, value, label, synonyms, ((to_tsvector('english', lower(value)) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0) OR (lower(value) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0) OR ((to_tsvector('english', lower(label))) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0) OR (lower(label) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0)) as partial_value_label_match, (lower(value) ='OID' OR lower(label) ='OID') as exact_value_label_match, (synonyms @> '{OID}') is true as synonym_match FROM tsvector_business_objects AS business_objects_alias
WHERE synonyms @> '{OID}'
OR (to_tsvector('english', lower(value)) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0)
OR (lower(value) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0)
OR ((to_tsvector('english', lower(label))) @@ plainto_tsquery('english', 'OID') AND numnode(plainto_tsquery('english', 'OID')) > 0)
OR (lower(label) LIKE '% OID %' AND numnode(plainto_tsquery('english', 'OID')) = 0) OR (lower(value) ='OID' OR lower(label) ='OID')
limit 30
QUERY PLAN |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
Limit (cost=66996.67..67036.72 rows=30 width=82) (actual time=312.131..312.251 rows=30 loops=1) |
Output: type, value, label, synonyms, (((to_tsvector('english'::regconfig, lower((value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((label)::text)) @@ '''oid'''::tsquery))), (((lower((value)::text) = 'OID'::text) OR (lowe|
Buffers: shared hit=45103 |
-> Bitmap Heap Scan on mdlz_performancebenchmarking.tsvector_business_objects business_objects_alias (cost=66996.67..752444.39 rows=513425 width=82) (actual time=312.130..312.247 rows=30 loops=1) |
Output: type, value, label, synonyms, ((to_tsvector('english'::regconfig, lower((value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((label)::text)) @@ '''oid'''::tsquery)), ((lower((value)::text) = 'OID'::text) OR (l|
Recheck Cond: ((business_objects_alias.synonyms @> '{OID}'::text[]) OR (to_tsvector('english'::regconfig, lower((business_objects_alias.value)::text)) @@ '''oid'''::tsquery) OR (to_tsvector('english'::regconfig, lower((business_objects_alias.label|
Heap Blocks: exact=1 |
Buffers: shared hit=45103 |
-> BitmapOr (cost=66996.67..66996.67 rows=666282 width=0) (actual time=310.732..310.732 rows=0 loops=1) |
Buffers: shared hit=45102 |
-> Bitmap Index Scan on lower_case_synonym_tsvector_business_objects (cost=0.00..189.20 rows=1 width=0) (actual time=0.008..0.008 rows=0 loops=1) |
Index Cond: (business_objects_alias.synonyms @> '{OID}'::text[]) |
Buffers: shared hit=2 |
-> Bitmap Index Scan on txt_value_tsvector_business_objects (cost=0.00..2638.25 rows=333140 width=0) (actual time=49.131..49.131 rows=575000 loops=1) |
Index Cond: (to_tsvector('english'::regconfig, lower((business_objects_alias.value)::text)) @@ '''oid'''::tsquery) |
Buffers: shared hit=86 |
-> Bitmap Index Scan on txt_label_tsvector_business_objects (cost=0.00..2638.25 rows=333140 width=0) (actual time=49.956..49.956 rows=575000 loops=1) |
Index Cond: (to_tsvector('english'::regconfig, lower((business_objects_alias.label)::text)) @@ '''oid'''::tsquery) |
Buffers: shared hit=86 |
-> Bitmap Index Scan on type_value_label_lower_case_tsvector_business_objects (cost=0.00..30444.59 rows=1 width=0) (actual time=93.168..93.169 rows=0 loops=1) |
Index Cond: (lower((business_objects_alias.value)::text) = 'OID'::text) |
Buffers: shared hit=22464 |
-> Bitmap Index Scan on type_value_label_lower_case_tsvector_business_objects (cost=0.00..30444.59 rows=1 width=0) (actual time=118.465..118.465 rows=0 loops=1) |
Index Cond: (lower((business_objects_alias.label)::text) = 'OID'::text) |
Buffers: shared hit=22464 |
Planning time: 0.249 ms |
Execution time: 312.579 ms
输出数据
type |value |label |synonyms|label_tsvector |partial_value_label_match|exact_value_label_match|synonym_match|
---------------------|-----------|-----------|--------|--------------------|-------------------------|-----------------------|-------------|
orderid_1621409737948|OID-0127820|OID-0127820|NULL |'-0127820':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0355880|OID-0355880|NULL |'-0355880':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0041048|OID-0041048|NULL |'-0041048':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0499716|OID-0499716|NULL |'-0499716':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0219268|OID-0219268|NULL |'-0219268':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0000560|OID-0000560|NULL |'-0000560':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0355656|OID-0355656|NULL |'-0355656':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0355628|OID-0355628|NULL |'-0355628':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0219380|OID-0219380|NULL |'-0219380':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0063896|OID-0063896|NULL |'-0063896':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0054740|OID-0054740|NULL |'-0054740':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0447020|OID-0447020|NULL |'-0447020':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0040964|OID-0040964|NULL |'-0040964':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0499744|OID-0499744|NULL |'-0499744':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0219800|OID-0219800|NULL |'-0219800':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0355180|OID-0355180|NULL |'-0355180':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0530348|OID-0530348|NULL |'-0530348':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0219996|OID-0219996|NULL |'-0219996':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0220024|OID-0220024|NULL |'-0220024':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0446936|OID-0446936|NULL |'-0446936':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0220108|OID-0220108|NULL |'-0220108':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0020692|OID-0020692|NULL |'-0020692':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0354872|OID-0354872|NULL |'-0354872':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0097496|OID-0097496|NULL |'-0097496':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0354648|OID-0354648|NULL |'-0354648':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0128268|OID-0128268|NULL |'-0128268':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0354536|OID-0354536|NULL |'-0354536':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0530432|OID-0530432|NULL |'-0530432':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0128324|OID-0128324|NULL |'-0128324':2 'oid':1|true |false |false |
orderid_1621409737948|OID-0354256|OID-0354256|NULL |'-0354256':2 'oid':1|true |false |false |
random_page_cost 为 1.1。
我认为 Postgres 查询规划器认为使用序列扫描会更快,但事实似乎并非如此。
最佳答案
一个根本问题是规划器认为它会在 seq 扫描的早期找到 30 行,因此可以很早停止。这是错误的,显然是因为与您的条件相匹配的行很少出现在表的早期部分。这可能很难仅通过改进选择性估计来解决,因为即使行估计准确无误,但行并未均匀分布在表中,也可能会犯此错误。
关于postgresql - 未使用 Postgres GIN 索引,始终进行 SEQ 扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67698646/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!