2011-01-14 102 views
3

我正在使用Wordpress自托管CMS开发网站。优化从具有百万行的表中选择查询

在页面中的一个中,我运行了一个函数来查询wordpress数据库,检查是否已发布帖子,我正在比较标题进行检查。

这里是我的查询:

$wpdb->get_row("SELECT id FROM wp_posts WHERE post_title = '" . $title . "'", 'ARRAY_A'); 

所以我在$标题是否张贴或没有,但我害怕,如果后期数量的增加,让说,100万发的帖子,我恐怕真的将非常缓慢..

有关如何使此查询更快的任何建议?我听说过CREATE INDEX和mysql缓存,但我不明白如何实现它..任何解释和参考建议将高度赞赏。

+1

哇,在wordpress博客中有100万帖子?你必须在你之前有一些大的博客计划。 – 2011-01-14 22:01:58

+0

好吧,你可以把你自己托管的wordpress变成许多种类的网页,不仅仅是博客,例如一个接近博客但实际上会有很多帖子的网站是一个新闻网站。是的,也许我最好是在没有CMS的情况下构建它,以获得最大的灵活性:D – ayublin 2011-01-15 01:26:11

回答

1

试试这个:

CREATE INDEX IX_wp_posts_post_title ON wp_posts (post_title) 

索引的建立将花费很长的时间,但以后你的查询应该是接近瞬间。

+0

感谢Mark,并且一旦我创建索引,对于在CREATE INDEX过程之后插入的任何新行将自动拥有索引权? – ayublin 2011-01-15 01:16:50

1

根据用于查询数据的大多数常用列在您的表上创建索引,例如在此处查找post_title。

此外,从您像您一样快速构建SQL-Select语句,您可能会对SQL注入攻击进行全面打开,并且应该避开字符串,最好使用参数化查询调用。

+0

感谢DRapp,我将阅读有关参数化查询,并修复我的代码。 – ayublin 2011-01-15 01:18:45

0

不太清楚你想在这里实现什么。世界末日似乎没有两个标题相同的帖子。

更多有关虽然是你的代码是完全SQL注入。阅读并使用参数化查询。

创建索引很容易。

在mytable(columnname)上创建索引myindex;

这将有助于选择......但如果你真的有百万行的行,你可能会更好地得到一些正确的数据库建议 - 您可能需要对数据进行分区。

0

如果您正在检查某个特定帖子是否已存在于您的数据库中,则应该使用该帖子的ID进行测试而不是其标题。一个是因为它是一个保证唯一标识符(假设它是主键),另外两个是因为查询能够以更快的速度搜索它。