小编Tho*_*ein的帖子

Postgres,不使用索引的简单查询

PostgreSQL 9.5.0

我有一个表,称为message_attachments它有1931964行。

我在该表中搜索一个键,那就是message_id.

我还总是包含deleted_atis NULL 语句(例如软删除)。

创建了一个索引:

CREATE INDEX message_attachments_message_id_idx 
   ON message_attachments (message_id) 
WHERE deleted_at IS NULL;
Run Code Online (Sandbox Code Playgroud)

所以它应该直接匹配这个查询:

EXPLAIN ANALYZE 
select * 
from "message_attachments" 
where "deleted_at" is null 
  and "message_id" = 33998052;
Run Code Online (Sandbox Code Playgroud)

但生成的查询计划如下所示:

Seq Scan on message_attachments  (cost=0.00..69239.91 rows=4 width=149) (actual time=1667.850..1667.850 rows=0 loops=1)
   Filter: ((deleted_at IS NULL) AND (message_id = 33998052))
   Rows Removed by Filter: 1931896
 Planning time: 0.114 ms
 Execution time: 1667.885 ms
Run Code Online (Sandbox Code Playgroud)

我在整个数据库中使用此类索引,但不知何故,它似​​乎不喜欢该特定表上的索引。

关于基数,最多有 5 列具有相同的值。

还在该表上运行了 ANALYZE …

postgresql indexing

3
推荐指数
1
解决办法
5475
查看次数

v8引擎 - 为什么从JS调用本机代码如此昂贵?

基于对其他问题的多个答案,从Javascript调用本机C++是昂贵的.

我用节点模块"基准"检查了自己并得出了相同的结论.

一个简单的JS函数可以直接获得~90 000 000个调用,当调用C++函数时,我最多可以得到大约25 000 000个调用.这本身并没有那么糟糕.

但是当添加对象的创建时,JS仍然是大约7万次调用/秒,但是本机版本遭受了巨大的损失并且下降到大约2 000 000.

我假设这与v8引擎如何工作的动态特性有关,并且它将JS代码编译为字节代码.

但是是什么阻止他们对C++代码实现相同的优化呢?(或至少打电话/洞察什么会有帮助)

v8 node.js

2
推荐指数
2
解决办法
814
查看次数

标签 统计

indexing ×1

node.js ×1

postgresql ×1

v8 ×1