SQL查询:利用FIND_IN_SET()函数高效匹配逗号分隔字符串中的值

哦,你们进行数据库查询优化吗?我以前也遇到过这种情况,很头疼。

当时我负责一个电商项目,用户上传的所有地址信息都是用逗号分隔的,比如“北京市朝阳区XX街”。
然后数据库需要过滤某个区域的数据,查询传统的OR条件,写起来比较困难,扩展性也很差。
每次更新地址。
SQL语句必须改变;很累。

曾几何时,我曾经有一个以逗号分隔的字符串,其中包含多个值,例如“A0001 ,A0002 ,A0003 ”。
当时我还在使用循环的方式执行查询,性能很差,每次查询都要到数据库来回多次,给服务器带来很大的压力。

后来,我了解了一个名为 FIND_IN_SET() 的函数,这是一个简单的创建。
它可以在以逗号分隔的字符串列表中搜索特定值并返回位置,这是非常高效的。
我使用这个函数编写一个查询并直接在数据库中解决它。

例如,我有逗号分隔的字符串“A0007 ,A0008 ,A0009 ”,我这样写SQL:
sql 来自数据查找点的col1 ; col2 , 选择 col3 FIND_IN_SET(col1 , :values);
然后绑定这个字符串,直接运行查询;结果即将公布。
这种方法不仅高效而且安全,因为它使用准备好的语句来防止 SQL 注入。

但是,这也有局限性。
例如,它不能使用索引;所以如果你有大量数据;您可能需要考虑其他解决方案。
另外,MySQL的group_concat_max_len设置也会影响性能,需要注意。

总的来说,FIND_IN_SET() 是个好东西;但必须在特定情况下使用。
对于像我这样的小项目来说已经足够了。
但是,如果你正在处理大数据或者有特别高的性能要求。
您可能需要寻找其他方法。
我从来没有接触过这个,所以我不敢说任何粗鲁的话哈哈。

SQL数据库中如何查询包含多个日期值的字段特定日期范围的数据?

SQL中高效处理逗号分隔字符串的多值查询

MySQL直接使用FIND_IN_SET(),效率更高,并且可以防止注入。

我在我的项目中使用它来检查用户标签,并且它是在一个查询中完成的。

仍在测试中,但我的经验是,使用大量数据时要谨慎使用,可能会扫描整个表。

自己掂量一下。