Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Database Design_Data Structures_Relational Database - Fatal编程技术网

Mysql 查询时间呈指数级增长?

Mysql 查询时间呈指数级增长?,mysql,database-design,data-structures,relational-database,Mysql,Database Design,Data Structures,Relational Database,在过去的几天里,我一直在努力规范化我们的600GB数据库。 我将所有冗余数据分解成4个单独的表和一个主条目表 到目前为止一切正常,但最后一步是将新表与旧数据记录连接起来,并将新的规范化数据记录插入数据库。但这不是问题所在。如果我在前100个id上运行此查询,则需要10秒,但如果在前300行上运行此查询,则需要几分钟。我能做些什么来解决这个问题 SELECT * FROM oldDB.`unNormalized` INNER JOIN `new_normalized_db`.`keyword`

在过去的几天里,我一直在努力规范化我们的600GB数据库。 我将所有冗余数据分解成4个单独的表和一个主条目表

到目前为止一切正常,但最后一步是将新表与旧数据记录连接起来,并将新的规范化数据记录插入数据库。但这不是问题所在。如果我在前100个id上运行此查询,则需要10秒,但如果在前300行上运行此查询,则需要几分钟。我能做些什么来解决这个问题

SELECT * FROM oldDB.`unNormalized` 
INNER JOIN `new_normalized_db`.`keyword` k ON `unNormalized_tabel`.`keyword` = k.`keyword`
INNER JOIN `new_normalized_db`.`project` p ON `unNormalized_tabel`.`awrProject` = p.`project`
INNER JOIN `new_normalized_db`.`searchEngine` s ON `unNormalized_tabel`.`searchEngine` = s.`searchEngine`
INNER JOIN `new_normalized_db`.`urlHash` u ON MD5(`unNormalized_tabel`.`url`) = u.`hash`
WHERE oldDB.`unNormalized_tabel`.`id` < 100
GROUP BY k.`id`, p.`id`, s.`id`,u.`id`

您可以通过添加索引来加快查询速度

如果在关键字上有一个索引,并且在非标准化的表格上也有一个索引,那么k的第一次连接会更快。关键字对于带有awrProject和p.project的项目p和s.searchEngine以及非标准化的表格searchEngine也是如此


但最后一次连接无论如何都会很慢,因为必须在查询时计算哈希,这在很多数据上非常慢。您可以做的是先对url进行散列,然后再插入到非规范化的选项卡中,然后在散列字段中添加索引。

我想在最后一个联接条件中无法摆脱MD5函数调用?两条一般规则:1联接中使用的列应为全文索引,不一定需要,非集群可以获得最佳性能,2个函数通常会否定在连接上使用索引的能力,因此MD5函数可能会导致严重的问题。您可以使用EXPLAIN检查查询的工作方式,我可以删除MD5哈希并只匹配纯URL,但在小测试用例10行中,MD5匹配实际上更快:/
 id  select_type  table              type    possible_keys                                                    key           key_len  ref                                 rows  Extra                                         
------  -----------  -----------------  ------  ---------------------------------------------------------------  ------------  -------  --------------------------------  ------  ----------------------------------------------
     1  SIMPLE       p                  index   (NULL)                                                           projectName   42       (NULL)                               427  Using index; Using temporary; Using filesort  
     1  SIMPLE       unormalized_tabel  range   PRIMARY,keyword_url_insDate,keyword,searchEngine,url,awrProject  PRIMARY       4        (NULL)                               358  Using where; Using join buffer                
     1  SIMPLE       u                  ref     url                                                              url           767      oldDB.unormalized_tabel.url       1                                                
     1  SIMPLE       k                  index   (NULL)                                                           keyword       42       (NULL)                            107340  Using where; Using index; Using join buffer   
     1  SIMPLE       s                  index   (NULL)                                                           searchEngine  42       (NULL)                              1155  Using where; Using index; Using join buffer