SQL 字符串函数如何实现分割字符串?

嘿,我们来谈谈数据库。
记得有一次,我在一个项目中使用了SQL Server。
那是2 01 4 年,项目在杭州。
当时我还在用老的分割字符串的方法,即SUBSTRING加CHARINDEX。
虽然这是通用的,但是写起来还是挺痛苦的。
有一次,一位同事走过来问我:“老李,这一行数据怎么可能只分为一个元素呢?”我查了一下,原来是一个逗号后面跟着一个逗号,连续分隔符。
那时我才意识到边缘案件处理的重要性。

后来,当项目更新到SQL Server 2 01 6 时,我开始使用STRING_SPLIT函数。
就简单多了,只需要写一行代码就可以完成。
不过,我还记得有一次,一位客户说他们的数据库是旧版本,无法使用STRING_SPLIT,所以我不得不回去使用SUBSTRING+CHARINDEX。
当时被吐槽版本兼容性确实很让人头疼。

我们来谈谈MySQL。
我在成都的一个项目中使用了MySQL 5 .7 当时,我使用 SUBSTRING_INDEX 来分割字符串。
我记得有一次,有一张表,里面有大量的数据。
我使用递归CTE来分割它。
结果运行时间很长,差点把服务器搞崩溃了。
后来,当我升级到MySQL 8 .0时,递归CTE变得更加方便,处理多行结果也快得多。

至于PostgreSQL,我在深圳的一个项目中使用了它。
当时我用的是STRING_TO_ARRAY加上UNNEST,简单又高效。
但是,我也遇到了顺序决定因素的问题,当时我必须手动处理它以避免返回空值。

总之,每个数据库系统都有自己的方法,关键是根据实际情况选择合适的方法。
必须考虑边界情况,也必须考虑性能优化,并且不能忽视版本兼容性。
这就像开车一样。
应根据路况和车辆情况调整驾驶方式。
你不能只追求速度。
哈哈,说了这么多,那你那里的数据库是怎么用的呢?你遇到过什么陷阱吗?

mysql 可以存储数组吗

严格来说,MySQL 没有原生的数组类型,而是 JSON 数组。
这可以通过多字段或关系表来模拟。
其实很简单。
每种方法都有其自身的条件和局限性。

首先,JSON数组适用于MySQL 5 .7 及以上版本。
比如我们去年做的一个项目,使用JSON数组来存储一些3 000级数据的配置信息。
这种方法存储方便,适合简单查询或者不指定元素个数的情况。
但一开始我以为他的表演很棒,但后来我发现我错了。
复杂的查询(例如过滤和排序)效率低下,尤其是当数据量很大时。

还有一点,多场模拟阵列是一种常用的方法。
去年我们还有一个项目,我们固定了数组的长度并进行了频繁的查询。
我们使用了几个字段来塑造数组。
该方法查询效率高;可以通过字段名称直接访问元素并利用索引优化。
然而有一个重要细节:规模不佳;固定数组长度;添加新元素;表结构需要修改,维护成本高。

还有一件事,关联表是一种推荐的方法。
通过外键链接主表和数组元素表。
数组长度可以动态调整,无需修改表结构。
例如,用户标签、订单列表等情况;查询有效;符合范式并减少数据重复。
但设计复杂度较高,需要编写较多的SQL代码。

简而言之,选择哪种方法?项目要求;应根据数据量和维护成本进行充分评估。
我认为值得尝试的是关联图。
设计虽然复杂,但从长远来看可以带来更大的灵活性。
还有一件事不要忽视性能问题,尤其是当数据量很大时。

MySQL-怎么解决json数组索引问题?

说白了,解决MySQL中JSON数组索引问题的关键是利用MySQL 8 .0.1 7 以上版本的多值索引特性。
其实很简单。
以下是要点:
让我们先谈谈最重要的事情。
版本必须是MySQL8 .0.1 7 或更高版本,并且必须使用InnoDB引擎。
去年,我们开展的一个包含约 3 000 个数据集的项目使用了这种方法来优化查询效率。

另一件事需要注意的是,在构建索引时,您需要针对 JSON 数组中的特定字段。
例如,如果标签ID存储在JSON结构中,您可以构建多值索引。
这样,数据库在查询时可以直接找到包含特定标签ID的数据记录,而无需遍历整个JSON数组或进行复杂的JSON解析。

还有一个重要的方面:性能提升。
事实上,添加索引后,我们看到查询时间从原来的1 5 0ms优化到了1 ms。
用技术术语来说,这称为雪崩效应。
事实上,前面的一点延迟就会导致后面的一切崩溃。

一开始我以为这只是理论上的优化,后来发现我错了,实际应用的时候,效果立竿见影。
等等,还有一件事。
多值索引为同一个 JSON 文档创建多个索引记录,每个记录都指向同一个数据记录。
这样查询时就可以直接找到具体的记录,减少了查询时间。

所以我觉得这个方法值得一试。
但在实际应用中,仍然需要根据具体的数据库设计和业务需求,合理选择数据存储方式、优化查询策略。