从具有百万行的表中优化选择查询

时间:2011-01-14 20:40:53

标签: php mysql wordpress

我正在使用Wordpress自托管CMS开发一个网站。

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

这是我的问题:

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

所以我正在检查是否发布了$ title,但我担心如果帖子的数量增加,就说100万帖子,我担心它会很慢......

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

4 个答案:

答案 0 :(得分:1)

根据查询数据时使用的最常见列创建表的索引,例如在这里查找post_title。

此外,您可以像现在一样动态构建SQL-Select语句,对SQL注入攻击是开放式的,并且应该从字符串中转义出来,最好使用参数化查询调用。

答案 1 :(得分:1)

试试这个:

CREATE INDEX IX_wp_posts_post_title ON wp_posts (post_title)

创建索引需要很长时间,但之后您的查询应该接近即时。

答案 2 :(得分:0)

不太确定你想在这里实现什么。拥有相同头衔的两个帖子似乎不是世界末日。

更多关注的是你的代码完全是sql-injectable。阅读并使用参数化查询。

创建索引很简单。

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

这将有助于选择...但是如果您确实拥有百万行,那么您可能最好获得一些正确的数据库建议 - 您可能需要对数据进行分区。

答案 3 :(得分:0)

如果您要检查数据库中是否已有特定帖子,则应使用帖子的ID来测试而不是标题。一个是因为它是一个保证的唯一标识符(假设它是主键),两个因为查询将能够以更快的速度搜索它。