Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询减慢计算机运行速度_Mysql - Fatal编程技术网

MySQL查询减慢计算机运行速度

MySQL查询减慢计算机运行速度,mysql,Mysql,我正在运行对MySQL数据库的查询。查询最多需要5分钟: 选择 将(*)计算为任务, tasks.owner, 四舍五入(平均时间(TIMESTAMPDIFF(day,tasks.created\u on,tasks.last\u modified)),0)作为平均时间 从…起 任务 左连接 objects.number=tasks.relationship上的对象 哪里 任务.状态!=“潜力” 分组 任务.所有者 按平均时间描述订购 限制10 tasks表大约有60000行。 我的MacBo

我正在运行对MySQL数据库的查询。查询最多需要5分钟:

选择
将(*)计算为任务,
tasks.owner,
四舍五入(平均时间(TIMESTAMPDIFF(day,tasks.created\u on,tasks.last\u modified)),0)作为平均时间
从…起
任务
左连接
objects.number=tasks.relationship上的对象
哪里
任务.状态!=“潜力”
分组
任务.所有者
按平均时间描述订购
限制10
tasks
表大约有60000行。 我的MacBook Pro的
mysqld
进程占用了整个CPU,我的风扇也启动了。我的查询是错误的还是MySQL的60000行太多了? 我加入的
objects
表大约有15000行

以下是create语句:

创建表“任务”(
`id`int(11)非空自动增量,
`complete`varchar(255)默认为空,
`由`varchar(255)默认为空完成,
`owner`varchar(255)默认为空,
`委托'varchar(255)默认为空,
`在“timestamp NULL DEFAULT NULL”上创建了_,
`task_name`varchar(255)默认为空,
`上次修改`时间戳为空默认为空,
`重新分配的`varchar(255)默认为空,
`角色`varchar(255)默认为空,
`状态'varchar(255)默认为空,
`关系`varchar(255)默认为空,
`唯一_id`varchar(255)默认为空,
主键(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=59444默认字符集=utf8
创建表“对象”(
`id`int(11)无符号非空自动增量,
`name`varchar(255)默认为空,
`数字'varchar(255)默认为空,
`context`varchar(255)默认为空,
`owner`varchar(255)默认为空,
`路由'varchar(255)默认为空,
`在“timestamp NULL DEFAULT NULL”上创建了_,
`上次修改`时间戳为空默认为空,
`状态'varchar(255)默认为空,
`project`varchar(255)默认为空,
`关系`varchar(255)默认为空,
`唯一_id`varchar(255)默认为空,
`键入`varchar(255)默认为空,
`说明`正文,
`拟议解决办法`案文,
`批准区域'varchar(255)默认为空,
`由`varchar(255)请求的_默认为空,
`customer`varchar(255)默认为空,
`升级状态'varchar(255)默认为空,
`priority`varchar(255)默认为空,
`business`varchar(255)默认为空,
主键(`id`),
键`number`(`number`)
)引擎=InnoDB自动增量=16700默认字符集=utf8
以下是
对象的一些示例数据

"id","name","number","context","owner","route","created_on","last_modified","status","project","relationship","unique_id","type","description","proposed_solution","region_of_approval","requested_by","customer","promotion_state","priority","business"
1,"NEW ARTICLE","CN0345928","Library","Max","Change Released","2020-11-17 06:13:00","2020-11-17 06:13:00","Released",NULL,"CR86030","2516967988","Change Notice","",NULL,"Americas-Europe",NULL,"","Released",NULL,"EU"
2,"Set Hose to Service Only","CN0345931","Library","Mo","Set to Service Only","2020-11-17 06:37:00","2020-11-17 06:37:00","Released",NULL,"CR86171","2516984806","Change Notice","",NULL,"Americas-Europe",NULL,"","Service Only",NULL,"EU"
3,"NEW MEASURING DEVICE","CN0344110","Library","Max","Promote to Release","2020-10-19 08:24:00","2020-10-19 08:39:00","Released",NULL,"CR85808","2493544772","Change Notice","",NULL,"Europe",NULL,"","Released",NULL,"EU"
对于
任务

"id","complete","completed_by","owner","delegate","created_on","task_name","last_modified","reassigned","role","status","relationship","unique_id"
1,"No","member",NULL,"","2008-08-27 20:28:00","Test of creating a parent part","2008-08-27 20:28:00","No","Assignee","Potential",11377,"3A67054501"
2,"Yes","member",NULL,"","2008-09-02 16:02:00","create a bom","2008-09-02 16:11:00","No","Assignee","Completed",11496,"3A67490902"
3,"Yes","member",NULL,"","2008-09-02 16:12:00","create a bom","2008-09-02 16:17:00","No","Reviewer","Completed",11496,"3A67491252"


您可以将WHERE条件放入左连接中。 你真的需要左会合吗?你不能在这里使用内部连接吗

INNER JOIN objects ON objects.number = tasks.relationship AND tasks.status <> 'Potential'
对象上的内部连接对象。编号=tasks.relationship和tasks.status“Potential”
60.000或15.000个实体对于数据库(如MySQL/MariaDB)来说算不了什么。数据库使用索引显著改进查找,但您必须识别并创建索引

如果您有性能问题:

  • 尽量减少已连接的行数(不要只连接左侧..有时最好从任务开始并连接对象。如果可能,请使用内部连接)

  • 更早地使用任务条件,并在加入行之前减少行数

  • 从语句生成存储过程(服务器可以更快地执行)

  • 在搜索的重要字段上使用索引


  • 为这两个表提供createtable。对于mysql来说,数字很小。请添加您的表定义(我们需要查看有哪些索引)和执行计划。是否索引了
    tasks.relationship
    ?如果是这样的话,
    objects.number
    是该索引的外键吗?当我说style时,我指的是tasks.relationship看起来像一个数字,objects.number开始于CN。除了我在该页上的另一个答案:你需要任务“relationship”列上的索引。您的语句将在varchar基础上比较这些列。那太慢了。您需要整数来更快地进行比较。索引将为“关系”列中的每个字符串创建哈希,并将该列上的搜索转换为整数搜索:),simple说。注意。。插入和更新速度将较慢,因为还必须创建新索引。。如果你要处理60000个插件,请记住这一点。从左到内的思考是有意义的。将WHERE条件用作WHERE条件以将其包含到联接中的确切区别是什么?据我所知,它将在应用Select中的函数之前过滤任务,而WHERE子句将在为每个组执行这些函数之后过滤任务。这一点解决了问题。但其余的都很有帮助。非常感谢。