zblog查询标签ID下的文章的SQL语句优化+索引
浏览:656 作者:Admin 评论(0)
今天使用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等需要注意,添加不当是不会走索引的。
事实证明当文章和标签量持续增加时,应避免使用模糊查找。