有时在 SNAFU 期间,我必须跑kill query xxxxxxx
二十或三十次。任何形式的kill all
命令我失踪?
因为我不喜欢打字。
我只能想象用两个数据库查询来做这件事。第一个查找数据库中的行数,第二个ORDER BY
在我感兴趣的列上选择一个,LIMIT X, 1
其中 X 是行数的一半。
有没有一种简单的方法可以只用一个查询来做到这一点?
现在我在计算中使用平均值,但我认为平均值会更好;这些值没有上限,它们从下限为 0。
编辑:是的,我的意思是说“中位数”,但有一些大脑错误并搜索了“平均值”。我现在在stackoverflow 上找到了答案
我有一个表,UNIQUE
在_job_id__
和上有一个多列索引__keyword_id__
。
__job_id__
如果我有一个GROUP BY
对该列执行 a 的频繁查询,我还需要添加另一个索引吗?
(在 1 亿行时可能需要一段时间。这就是为什么我要问而不仅仅是做)
在 MySQL 中删除重复索引需要很长时间,所以在我等待的时候,我搜索了它并找到了 2006 年的这篇文章,谈论 MySQL 如何处理ADD
和DROP
索引。
如果表 T 是具有四个索引(ndx1、ndx2、ndx3、ndx4)的 MySQL 表,并且您想“更改表 T 删除索引 ndx3;” 这正是幕后发生的事情:
1) MySQL 将 T.MYD 复制到临时表,即 S.MYD 和零字节 S.MYI。2) MySQL 确实 'alter table S add index ndx1 (...); 3) MySQL 确实 'alter table S add index ndx2 (...); 4) MySQL 'alter table S add index ndx4 (...); 5) MySQL 删除 T.MYD 并删除 T.MYI 6) MySQL 将 S.MYD 重命名为 T.MYD,并将 S.MYI 重命名为 T.MYI
这仍然是真的吗?他的建议是否仍然有效?
给定具有四个索引(ndx1、ndx2、ndx3、ndx4)的同一个 MyISAM 表 T 并且您想“更改表 T …
我们在外部站点上遇到了间歇性错误:
警告:mysql_connect() [function.mysql-connect]:用户“557574_prod”已超出“max_user_connections”资源(当前值:10)
这会阻止该站点被访问并有效地将其关闭。
(显然增加 'max_user_connections' 可以解决这个问题,但这不是我们的托管方案的一个选项)
我可能已经“修复”了它,但我不是 100% 确定我理解这个问题,我想说清楚。我认为问题一定是由太多的 cron 作业耗尽连接造成的(我们每分钟都有几个运行),我减少了 cron 作业的数量,这似乎减少了错误数量。我为 cron 作业创建了一个单独的用户帐户,所以如果这是问题,现在应该解决。
但是我们的日志系统在错误发生时并没有记录下来,所以我还是很担心。
所以我问:MySQL 中的“user_connection”是什么构成的?
我觉得我多虑了。. .
我有过类似的事情无法控制tmp_table_size
和max_heap_table_size
,所以作为我们成长的表,要求临时表的查询所用的时间是几何级数增长。
我想知道是否有办法防止 MySQL 对这些查询使用临时表?在这种情况下最好的方法是什么:
这是最大的罪犯的一个例子:
SELECT `skills`.`id`
FROM (`jobs_skills`)
JOIN `jobs` ON (`jobs`.`id` = `jobs_skills`.`job_id`)
JOIN `skills` ON (`skills`.`id` = `jobs_skills`.`skill_id`)
WHERE `jobs`.`job_visibility_id` = 1
AND `jobs`.`active` = 1
AND `skills`.`valid` = 1
AND `jobs_skills`.`skill_id` IN (96,101,103,108,121,2610,99,119,2607,102,104,112,113,122,1032,1488,2608,109,126,1438,2310,2318,2622,118,1046,1387,2609,100,116,123,2611,2612,2616,2618,114,127,1562,1587,1608,2276,2615,125,1070,1071,1161,1658,2613,2614,2617,105,110,111,120,1394,1435)
GROUP BY `jobs_skills`.`job_id`
Run Code Online (Sandbox Code Playgroud)
其中copying to temp table
耗时 107 秒,占总查询时间的 99%。
尽管担心 tl;dr 综合征,我还是提供。. .
更多细节
以下是EXPLAIN
查询语句:
+----+-------------+-------------+--------+----------------------+--------------+---------+----------------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows …
Run Code Online (Sandbox Code Playgroud) 我正在处理的站点有很多后端/cron 活动,因此每天每秒执行 5 到 15 个查询。这会使页面加载速度减慢一秒或更长时间。
我在想最好的办法是创建两个数据库并每天同步它们。然而:
所以我想知道:
非常感谢!
顺便说一句,在“可以”的服务器上运行 PHP/MySQL。
决定设置主从复制后,我找到了这篇文章,这似乎正是我想要的。
所以我在 Navicat 中启动了 MySQL 控制台来尝试一切,命令什么也不做。所以似乎其中之一是问题:
这是我链接的文章的第一步:
/sbin/ifconfig
在远程服务器连接上什么都不做(使用 Navicat 中的控制台),但在我本地机器上 WAMP 服务器上的 MySQL 控制台上工作正常。
更新:
第二天 - 头脑清醒 - 意识到我试图做的事情可能是不可能的,也没有必要。网站托管在加利福尼亚的一些机架空间服务器上,我怀疑他们希望我弄乱他们的服务器设置。
我试图建立单独的数据库,以便写入繁重的后端不会干扰前端的读取。今天早上我重新处理了导致表锁定的调用,现在缓慢的后端查询不应该锁定前端所需的任何表。
所以基本上问题解决了。这就是为什么我应该只在早上发帖,而不是在编码 8-10 小时后发帖。