-1

大家好,我有这样的问题。我已经在我的笔记本电脑上下载并激活了 Mysql,这是一个普通的笔记本电脑,然后我使用 GUI,我正在尝试学习如何使用 Mysql。我实际上是在一开始,所以现在我正在导入表 - 以 csv 格式 - 并尝试在它们上运行我过去在 ms 访问中运行的相同查询。关键是,一方面,Mysql 似乎保留了任何类型的表维度,但另一方面却非常慢。事实上这么慢,我确信我一定做错了什么。我有两个表,每个表有 1400000 行和 70 列:如果我对每个表运行基本查询(例如选择字段 A1 为“23”的所有行),那么没问题。但是如果我运行查询如果两个表之间有一个(内部?)连接,那就是一场灾难。我在 6 小时前开始处理这样的查询,但它仍在继续。....同样的查询,在 ms 访问中,花了 15 秒。我确定我一定错过了什么。操作系统是 ubuntu 12.10,GUI 是 Navicat 11。谢谢

4

1 回答 1

1

MySQL 基本上只支持两种连接算法——索引查找和嵌套循环。嵌套循环基本上意味着 MySQL 从第一个表中读取一行,然后从第二个表中读取所有行。然后是第一个表中的另一行,以及第二个表中的所有行。等等。(实际上,该算法确实阻塞了读取,所以它并没有那么糟糕,但你明白了。)

当您有大表时,嵌套循环是一个非常糟糕的选择。其他数据库支持诸如散列连接算法和合并连接算法之类的东西,但这些不是一个选项。

我猜你的两张表太大而无法放入内存。这导致了最坏情况下的性能,因为 SQL 引擎本质上必须从磁盘中读取第一个表中每一行(或一批行)的所有记录。

您可以通过在列上建立索引来解决此问题。这应该会大大提高性能。

您还可以调查内存参数。文档在这里。确保为 sql 引擎分配了足够的内存。

于 2013-05-25T22:20:12.533 回答