2011-10-07 18 views
1

现在这个表是有问题,实际上是为网站那里有五列关键字分析的关系表(keyword_idwebsite_idoccurrencepercentagedate表在性能问题上运行超过12万行

这允许网站在一段时间内的关键字统计信息,并允许向网站所有者呈现可视图表。

现在的问题是,我们平均每个网站索引约57个唯一的关键字。我们每天索引约12000个网站,这是因为我们已经遇到了性能问题。所以你得到这张桌子大小增长非常快的图片。

现在我有一个索引keyword_id,website id, occurrencepercentagedate)。所以他们每个人都有一个索引,但我仍然有选择问题。

你将如何解决这个性能问题与MySQL的MySQL?

NOTE: The indexes are for each field and 1 for all of them combined as well. 

SQL QUERY 1: SELECT * FROM table WHERE keyword_id = "323242" 
SQL QUERY 2: SELECT * FROM table WHERE website_id = "232" 
SQL QUERY 3: SELECT * FROM table WHERE keyword_id = "323242" ORDER by percentage 
SQL QUERY 4: SELECT * FROM table WHERE website_id = "232" ORDER by occurence 
SQL QUERY 5: SELECT * FROM table WHERE keyword_id = "323242" ORDER by occurrence 
SQL QUERY 6: SELECT * FROM table WHERE website_id = "232" ORDER BY date 
+2

你可以发布问题查询或查询的SQL吗? – webbiedave

+2

您是否拥有包含所有5个字段或5个单独索引的单个索引。显示一个示例结果集会有所帮助,你是否遇到SELECT或INSERT数据的问题? – Sparky

+1

你可以发布缓慢运行的查询的'EXPLAIN'吗? – philwinkle

回答

4

什么是关键字的分布和概率?例如,如果您有每个站点使用的关键字,则每天在6个mos之后,对于单个关键字,这是2.1M行。我相信情况并非如此,但流行的词语正在迅速变大。

website_id一个不应该太糟糕,只有几千行。

如果您只是通过keyword_id和website_id进行查询,其他索引耗费您的时间和空间(但未读取)。

理想情况下,关于keyword_id百分比的索引可让优化程序为您的keyword_id按百分比查询排序返回一个相当快速的结果,其他类似,但这可能取决于很多数据布局。

盒子上有多少内存以及驱动器有多快?当你做这些查询时,我会查看每秒IO Ops。你可以很容易地只是颠簸你的驱动器。

有了相当数量的内存,子句的顺序应该相当便宜,并且可能比较便宜地对它们进行排序,而不是从磁盘上进行大量的随机读取,但这取决于索引以及它是如何组织的磁盘上的页面。

此外,请确保您的所有统计信息都是最新的。错误的统计数据会谋杀你的查询。

+0

5GB RAM ......... – Vish

相关问题