数据量大小:对于大量数据的查询,JOIN通常更优,因为FIND_IN_SET需要进行全表扫描。 场景选择:如果数据量小且值域固定,可以考虑使用FIND_IN_SET,但需要注意其限制和使用场景。 总的来说,选择FIND_IN_SET还是JOIN应根据具体的查询需求、表结构、索引情况和数据规模进行权衡和选择,以达到最优的查询性能。
一般语句就像下面SELECT*FROMpostLEFTJOINpost_tag_mappingWHEREtag_id=123但是当我发现FIND_IN_SET函数后,就可以完全不用JOIN这种查询方式了,我们完全可以在文章表里设置一个类型为SET的标签字段(tags),它存储标签id的格式就像这样111,222,333,查询语句就变成了SELECT*FROMpostWHEREFIND_IN_SET('123',tags)不用做...
Mysql中的FIND_IN_SET函数在我知道它之前,我在做一个一对多的外键查询时,都会在中间设计一个关系表。比如一篇文章(post)对应多个标签(tag),我就会在中间设计一个关系表(post_tag_mapping)来记录文章和标签的对应关系,然后查询某一个标签下的文章时,就用JOIN语句来实现了,这也应该是处理一对多关系查询时的标准做法...
select * from A join B on find_in_set(A.id,B.ids) != 0; 1. 2. 3. tp5.1 写法 $banner_list = Db::name('banner') ->alias('b') ->field('b.id,b.title,b.img,b.url,b.description') ->join('menu m','find_in_set(m.id,b.category)!=0') ->where('m.deleted',0) -...
在许多应用场景中,我们经常需要在两个表之间进行关联查询。FIND_IN_SET函数虽然简便,但在处理大量数据时性能问题逐渐显露。因此,本文将探讨为何使用FIND_IN_SET会导致性能下降,并提供一种优化方案,通过使用JOIN、索引及更好的数据设计来提高查询效率。 1. 问题分析 ...
在Join中使用FIND_IN_SET $d['a.cold'] = 2; $d['b.PostId'] = $up_id['PostId']; $d['b.F_Id'] = $up_id['Id']; $d['WorkinTime'] = array('lt',$lastday); $down2 = Db::name('admin_user') ->field('a.*,a.Id as user_Id,b.*')...
Db::table('think_img')->field('think_img.*,GROUP_CONCAT( think_img_label.name separator " - " ) as labelName')->join('think_img_label', 'FIND_IN_SET( think_img_label.id,think_img.label_id )', 'left')->group('think_img.id')->order('think_img.sort')->select(); ...
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决...
FIND_IN_SET() 是MySQL 中的一个字符串函数,用于在一个逗号分隔的字符串列表中查找一个特定值的位置 使用索引:虽然 FIND_IN_SET() 不能直接利用索引,但你可以通过其他方式优化查询性能。例如,将逗号分隔的字符串存储在一个单独的表中,并为该表创建索引。这样,你可以使用标准的 JOIN 和WHERE 子句来查询数据,...
性能:在某些情况下,`FIND_IN查询效率可能比JOIN高。 类型与应用场景 FIND_IN_SET主要用于处理那些以逗号分隔的字符串列表,例如: 标签系统:当一个项目或文章有多个标签时,这些标签可能会以逗号分隔的形式存储在一个字段中。通过FIND_IN_SET可以方便地查询具有某个特定标签的项目或文章。