当在具有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) 我有一个 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) 我有一个非常简单的表,用于记录成员个人资料上的访问,并带有多列键(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的菜鸟,但执行这些查询需要几分钟的时间,这并不正常。
感谢您的输入!
最好的祝福,
我是Node.js的新手,我想知道除了session()之外,我是否可以使用"存储"来存储当前请求的变量?
我有一个基于Authorization标头的API,以及一个存储在Redis中的有效标记池.
因此,我没有会议,也不想.
但是我希望在此请求期间存储变量以供进一步使用.例如,我想存储与Redis中找到的令牌相对应的user_id,以便我可以在任何我想要的地方使用它.
如果我这样做:
app = express();
app.user_id = 1;
没关系,或者我的user_id会变成全局应用程序处理的所有请求吗?(简而言之:是为服务器处理的每个请求实例化的app,还是持久的?)
如果这不行,我怎么能在没有会话的情况下实现这样的目标呢?
感谢您的任何帮助 :)
indexing ×2
mysql ×2
node.js ×2
explain ×1
md5-file ×1
node-webkit ×1
nw.js ×1
performance ×1
session ×1
sql ×1