我正在使用Wordpress自托管CMS开发一个网站。
在其中一个页面中,我运行了一个函数,对wordpress数据库进行查询,检查帖子是否已经发布,我正在比较标题进行检查。
这是我的问题:
$wpdb->get_row("SELECT id FROM wp_posts WHERE post_title = '" . $title . "'", 'ARRAY_A');
所以我正在检查是否发布了$ title,但我担心如果帖子的数量增加,就说100万帖子,我担心它会很慢......
有关如何更快地进行此查询的任何建议吗?我听说过CREATE INDEX和mysql缓存但我不明白如何实现它...任何解释和参考建议都将受到高度赞赏。
答案 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来测试而不是标题。一个是因为它是一个保证的唯一标识符(假设它是主键),两个因为查询将能够以更快的速度搜索它。