小编Lid*_*oku的帖子

Mysql:2个ID的主键上的内连接给出"为每个记录检查范围"

当在具有2个值(使用IN或OR结构)的PRIMARY键上进行INNER JOIN时,我在EXPLAIN SELECT中得到"检查每个记录的范围(索引映射:0x1)"

这是查询:

SELECT *
FROM message AS m
INNER JOIN user AS u
ON u.id = m.sender_id OR u.id = m.receiver_id
Run Code Online (Sandbox Code Playgroud)

在做解释时,它给了我:

+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows  | Extra                                         |
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------------------------+
|  1 | SIMPLE      | u     | ALL  | PRIMARY       | null | null    | null | 75000 | Range checked for each record (index map: 0x1)|
+----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

它不可能......

如果我尝试这个,我会得到相同的结果:

SELECT *
FROM …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing explain

9
推荐指数
1
解决办法
1954
查看次数

NodeJS:扫描目录树非常慢

我有一个 NW.js 应用程序,它可以简单地(递归地)扫描目录树并获取每个文件/目录的统计信息。它还对文件执行 MD5。

我有 29k 个文件、850 个文件夹,全部用于 120GB 数据。

大约 7 分钟后,我的代码在 29k 个文件中只扫描了 4080 个文件。

怎么可能这么慢??我可以做些什么来提高性能吗?否则,Node 对我来说就没用了......

令人惊讶的是,扫描 1k 个文件“仅”花费了 7 秒。为什么只扫描 4 倍的文件却要花 60 倍的时间?

当我检查进程时,我可以看到 Node 的 RAM 使用量发生了很大变化:从 20MB 到 400MB(双向波动)。但CPU使用率一直停留在1%。

这很奇怪,因为我认为我没有分配那么多内存。事实上,我什么也没分配!请参阅下面我的代码。

if (process.argv.length < 3)
    process.exit();


var fs = require('fs');
var md5 = require('md5');
var md5File = require('md5-file');

var iTotal = 0;
var iNbFiles = 0;
var iNbFolders = 0;

var iBegin = Date.now();

var App =
{
    scan: function(path)
    {
        var items = …
Run Code Online (Sandbox Code Playgroud)

performance node.js md5-file node-webkit nw.js

5
推荐指数
1
解决办法
1902
查看次数

MySQL在哪里不使用索引

我有一个非常简单的表,用于记录成员个人资料上的访问,并带有多列键(member_id,visitor_id,month_visited)和更精确的日期。month_visited是一个类似CHAR(7)的列:'2013-10'

每个新月,我想在另一个表中压缩上个月的数据,然后将其删除。

我的要求很简单:

DELETE FROM visits WHERE month_visited = '2013-10'
Run Code Online (Sandbox Code Playgroud)

删除这些行需要AGES,例如在我的专用服务器上需要几分钟。当我只查询一个简单的SELECT COUNT(*) FROM visits

我在2013-10年度有180万个参赛作品。

但是这需要很长时间。当我尝试

EXPLAIN SELECT * FROM visits WHERE month_visited = "2013-10"
Run Code Online (Sandbox Code Playgroud)

它告诉我:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  visits  ref idx_month_visited   idx_month_visited   21  const   1782148 Using where
Run Code Online (Sandbox Code Playgroud)

“在哪里使用”,认真吗?

编辑:对不起,我忘记指定仅在month_visited列上也添加了一个索引:)(实际上,正如EXPLAIN所示,但它不使用它...)

如何改善那些(显然)简单的查询?我是MySQL的菜鸟,但执行这些查询需要几分钟的时间,这并不正常。

感谢您的输入!

最好的祝福,

mysql indexing

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

Node.js变量仅用于当前请求?

我是Node.js的新手,我想知道除了session()之外,我是否可以使用"存储"来存储当前请求的变量?

我有一个基于Authorization标头的API,以及一个存储在Redis中的有效标记池.

因此,我没有会议,也不想.

但是我希望在此请求期间存储变量以供进一步使用.例如,我想存储与Redis中找到的令牌相对应的user_id,以便我可以在任何我想要的地方使用它.

如果我这样做:

app = express(); app.user_id = 1;

没关系,或者我的user_id会变成全局应用程序处理的所有请求吗?(简而言之:是为服务器处理的每个请求实例化的app,还是持久的?)

如果这不行,我怎么能在没有会话的情况下实现这样的目标呢?

感谢您的任何帮助 :)

session session-variables node.js

0
推荐指数
1
解决办法
1002
查看次数