大家好,我有这种问题。 我已经在我的笔记本电脑上下载并激活了Mysql,这是一个普通的笔记本,然后我使用GUI,我正在尝试学习如何使用Mysql。 我实际上是在一开始所以现在我正在导入表格 - 以csv格式 - 并尝试在它们上运行我曾经在ms访问中运行的相同查询。 关键是Mysql一方似乎保留了任何一种表维度,但另一方面则极其缓慢。 事实上,我确信我一定做错了。 我有两个表,每个表有1400000行和70列:如果我对每个表运行一个基本查询(例如选择字段A1为'23的所有行),那么没问题。 但是,如果我在两个表之间运行(内部?)连接的查询,那么这是一场灾难。 我在6小时前开始处理这样的查询并且它仍在继续.....相同的查询,在ms访问中,花了15秒。 我敢肯定我一定错过了什么。 操作系统是ubuntu 12.10,GUI是Navicat 11。 谢谢
答案 0 :(得分:1)
MySQL基本上只支持两种连接算法 - 索引搜索和嵌套循环。嵌套循环基本上意味着MySQL从第一个表中读取一行,然后从第二个表中读取所有行。然后是第一个表中的另一行,以及第二个表中的所有行。等等。 (实际上,该算法确实阻止了读取,所以它并不是那么糟糕,但你明白了。)
当你有大表时,嵌套循环是一个非常糟糕的选择。其他数据库支持散列连接算法和合并连接算法等,但这些都不是一种选择。
我猜你的两个表太大而无法放入内存中。这导致了最糟糕的性能,因为SQL引擎基本上必须从第一个表中读取每行(或一批行)的所有磁盘记录。
您可以通过在列上构建索引来解决此问题。这应该会大大提高性能。
您还可以调查内存参数。文档是here。确保为sql引擎分配足够的内存。