是不是我孤陋寡闻了,会有人真的在 MySql 里运行这样的查询吗?

232 天前
 unidotnet

这种 Non-Standard SQL 语法为什么还能活着

SELECT * FROM table1 
WHERE '你好啊这是一句用户输入的查询语句' LIKE CONCAT('%', table1.column1, '%');

当然不考虑 performance ,它是可以的,但是如果数据量大,就 GG 了吧?

8678 次点击
所在节点    数据库
67 条回复
wangtian2020
232 天前
大部分公司都不会遇到性能瓶颈。同时性能越差优化越简单,简单修改一下就能提高一个量级,也不会出来发帖的
b821025551b
232 天前
@realpg 业务场景不同罢了,恐怕你没看过这玩意: https://zhuanlan.zhihu.com/p/18660206854
adoal
232 天前
这不是 non-standard SQL 语法。SQL 里能用标量值的地方,往往也能用标量类型的结果集,就是相当于把结果集里的标量 for each 一遍而已。
urlk
232 天前
MySQL JSON 功能用多了, 看这个也很正常
kd9yYw2RyhQwAwzn
232 天前
见识到了
KongLiu
232 天前
开始看到这不是挺正常的,一看才发现是 输入 like 字段
yh7gdiaYW
232 天前
我觉得这对对后台和公司内部系统来说挺正常的,数据量不是特别大的时候,也不至于为了模糊匹配再去搞个搜索引擎
pangzipp
232 天前
感觉是 javaer 写的
unco020511
232 天前
这是查敏感词的吧
yh7gdiaYW
232 天前
@cpstar 比如 table1.column1 的数据量很大并且有一定更新频率的时候,OP 举的这个写法比在代码里比较更优
githmb
232 天前
MySql 连很多标准都不支持,为什么它支持的却不能用?
Rickkkkkkk
232 天前
如果是用户输入,有注入的风险。
irisdev
232 天前
如果这张表只有几十行几百行数据,这一列只有“习*”、“*党”等字符串,用户输入前端卡住最多输 50 字,也不会有什么性能问题吧
youngwen
231 天前
@angryfish 如果需要检查用户的输入中,是否包含一些预设的敏感词,这种写法就比较合适,敏感词不多的时候,性能也不差
IamUNICODE
231 天前
数据量大有数据量大的玩法吧,只能说
zlowly
231 天前
table1 感觉就是个敏感词库吧,这 sql 哪里有问题了?你都说了“但是如果数据量大”,那么显然目前 table1 就是不大的,大概率以后也不会有多大。performance 的话,小表拉到内存里全表扫描,也是相当快的。
zlowly
231 天前
补充一下,对比上面有人提出的用 LOCATE 之类的方法,LIKE CONCAT('%', table1.column1, '%');,有个小优势,其实这个 table1 表的 column1 里的存放的敏感词是可以用%_,例如可以是"CN%B"之类的,当然是比较简陋误杀率高。但敏感词嘛,杀错了就杀错了,大家还少见吗。
changdy
231 天前
不是 ..等等... 我怎么有点晕..
Non-Standard SQL 听起来像是说方言问题 .但是下一步又说到了性能问题...
op 到底是对那部分问题有疑问?

另外....performance 为什么不直接说性能呢, 略微奇怪.
yannxia
231 天前
规模不大的情况下可以这么用,当然也可以 load 到内存里面再搞,没什么区别。规模大了,就不能这么搞了,不如先聊聊多大体量
sampeng
231 天前
一个表就几十万数据。。折腾他干啥呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1115574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX