2012-05-28 50 views
1

目标:我试图确定表结构和查询的最佳方法;即如何最好地创建组合索引键来优化每个表中大约500k行的四个表连接。如何创建SQL测试环境?

精神障碍:这是建立表格并填充测试数据,我很难理解(SQL新手)。 This SO post描述了我试图解决的问题的75%,我想我可以完成我的理解,如果我可以让answer's code在我的localhost(apache2,mysql5.1,phpMyAdmin)上运行。

的请求帮助:杰克Feasel的sqlfiddle网站是一个很好的工具,但据他不会扩展到这一水平。但是,有人可以使用sqlfiddle向我展示如何在本地机器上构建此环境?我希望推断你的sqlfiddle帖子来复制上面提到的示例代码。

一个假设:我的大部分SQL经验一直在调整ADOdb Database Abstraction Library,但我意识到MYSQL代码在测试环境中会略有不同。尽管如此,我仍然假设知道如何设置本地SQL测试环境以及随后的数据库结构和查询,在ADOdb环境中实施时,我将获得的优化知识将会适用并且有益。

+0

您将需要提供更多关于您想要表示的数据结构以及您想要生成的结果集的详细信息。 –

+0

@Jake_Feasel,我只是想了解如何设置一个环境来运行发布的示例代码到我链接到的SO问题。一旦我明白了,那么如果我仍然需要帮助解决我的具体问题,那么我可以通过链接到我自己的sqlfiddle示例来回到SO。 – Ricalsin

+0

对不起,我以前没有仔细阅读过。请参阅下面的答案。 –

回答

1

你真正需要的是一个数据生成工具,它将帮助您需要用数以百万计的记录的数据库,并可以看到一个有意义的数据臃肿的数据库后,你就可以开始你的性能测试实验的最佳关系,指数和加入这将帮助您检测真正需要优化的内容。

我以前亲自使用过的一个是:GenerateData 但是还有others

0

http://sqlfiddle.com/#!2/b771b/2

在这里,你可以看到,我复制你的表定义和粘贴他们到架构面板。我还在其中添加了一些虚拟数据。使用这个基本结构,我也执行了你的查询;你可以看到它产生了与你的馅饼显示相同的执行计划(展开小提琴上的“+查看执行计划”)。

你可以看到它在SQL Fiddle上运行良好。这解决了标题中的问题(“如何创建SQL测试环境”)。您的其他请求中的哪一部分“我如何在本地机器上构建这个环境?”你有麻烦吗?

+0

因此,如果我想在海报表字段中添加500k名称 - 为了测试访问时间 - 然后我将使用随机数生成器并循环它或使用编辑器如vim生成逗号分隔文本字符串并将其上载到Insert语句中(如果是这样的话)?我只是想知道什么是最好的方法是基本上做你刚刚做的,但500K行,而不是注释掉where子句。我意识到sqlfiddle并没有扩展到这个水平,但是如果我能看到它是如何完成5行的话,我可以将其推断到我的本地设置中。 – Ricalsin

+0

@Ricalsin为插入生成随机数据肯定会起作用。只要意识到你的执行计划将会是相同的,无论5行还是500k。考虑到这是一个简单的查询,但是,我怀疑你会通过优化硬件和操作系统设置而不是查询调优来获得大部分性能提升。 –

+0

杰克,这不是我的查询。我的查询将使用多个复合索引来连接4个表格(在我的文章的第一行中进行了描述)。我需要了解如何构建一个类似的测试环境(本地),并且我使用SO帖子来请求如何在表格中设置500k行的环境。显然它并不像看起来那么容易。我已经阅读你可以在哪里:INSERT INTO MyTable(ID,Name)SELECT ID,NAME FROM OtherTable',但是这要求你在你的数据库中有这样的信息 - 我现在不需要。我无法使用5行来测试访问时间,我需要研究一个计划的效率。 – Ricalsin