首页 知识 正文

zblog查询标签ID下的文章的SQL语句优化+索引

今天使用Z-Blog写某个功能的时候需要查询某个标签下的所有文章,发现使用like模糊搜索的时候速度是很慢的,根本就无法使用 ,平均耗时6s+, 遇到这种情况不解决肯定是不行的。


首先肯定是找万能的百度,搜索一番并没有发现zblog搜索包含标签ID的文章


此文仅做记录使用,遇到此问题的童鞋可以借鉴,如果大家有更好的优化方案也可以留言分享。


测试网站的各项数据


文章数量:25W+


标签数量:300左右


ng+php8+mysql5.7


标签并不多,但是文章有25W了,因为标签ID是以字符串形式存储的 {1},{2},{3} 又没有索引,导致查询的时候全表扫描 效率低下。


最开始使用的方法:

$tagID = 1;
$w = array();
$w[] = array('like', 'log_Tag', "%{$tagID}%");
// 平均耗时6s

优化方法:

// 创建log_Tag字段的索引
$zbp->db->Query("ALTER TABLE zbp_post ADD INDEX (log_Tag)");
$tagID = 1;
$w = array();
$w[] = array("(1 = 1) AND ( log_Tag in (SELECT log_Tag FROM zbp_post WHERE log_Tag LIKE '%{$id}%'))");

这样就会走索引,实现秒开效果。


如果需要添加其他的查询条件 如:log_Type log_Status log_CateID等需要注意,添加不当是不会走索引的。


事实证明当文章和标签量持续增加时,应避免使用模糊查找。


本文转载自互联网,如有侵权,联系删除

本文地址:https://liaojinhua.com/post/1097.html

相关推荐

zblog当前页面的相关信息如何获取?

zblog当前页面的相关信息如何获取?

今天在折腾zblog主题自带TDK功能,不想在模板文件里面写标签,想更方便的直接弄成一个函数调用。遇到了一些问题解决后分享出来希望能帮助到有同样需求的zblog用户们。zblogphp有一个全局变量是“$zbp”,在函数内“global $zbp;”,然后就可以通过这个对象来获取到当前页面的一些属性了。获取当前页面链接地址的标签是:$zbp->currenturl;获取当前页面标题是:$zbp->template->GetTags('title');获取当前页面

...

知识 2024-12-05 0 1396

zblog获取当前文章所有标签关键词的代码函数TagsName

zblog获取当前文章所有标签关键词的代码函数TagsName

很多主题会默认读取文章所有的标签作为内容页关键词,而读取标签的方式通常会使用遍历,这是因为很多主题作者不会去翻看zblog php程序源代码,所以不知道其实zblog本身有提供获取文章所有标签的函数TagsToNameString(),而且可以直接使用模板标签调用,并不需要再在模板里遍历拼接的。文章页获取所有文章标签的模板标签:$article->TagsName获取直接使用函数$article->TagsToNameString()代码位置:zb_system/function/l

...

知识 2024-12-04 0 1396

zblog添加用于SEO优化的link标签属性rel=”canonical”代码

zblog添加用于SEO优化的link标签属性rel=”canonical”代码

HTML的rel="canonical"是HTML link标签的一个属性,被称为权威链接标记属性,作用是解决网站内容被重复收录的问题。当网站因为各种原因导致同一个页面存在不同的URL(如网站改版、动态页面做了伪静态等),或者类似页面不同URL(如列表分页),就可以考虑使用这个link标签属性指定其中一个url作为权威版本来被搜索引擎收录,从而避免页面权重的分散流失。zblog默认没有这个标签属性,也没有提供直接生成的标签代码,所以要自己动手,不过也很简单,把下面的代码放到主

...

知识 2024-12-04 0 1396