| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1836 人关注过本帖
标题:SQL语句,where (字段值 Like %子串%) 或者 (atcc(子串, 字段值)>0),该如何 ...
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:330
注 册:2013-10-4
收藏
得分:0 
以下是引用csyx在2023-3-20 09:01:04的发言:
把 已处理 放在 地址 like ... 前面显然没坏处


这一点确实我没想到,很具性价比的顺序调整建议!非常感谢!

以下是引用倦猫1973在2023-3-20 18:17:05的发言:
有可能 join 出来一个超级大的结果集,也许这才是 Update 慢的主要原因。


join这个关键词,振聋发聩,我得好好思考一下!非常感谢!

第一版实在太慢,确实“旧串”不唯一;不过后来无意中我也发觉到了,第二版重新做了一个unique旧串表,然而速度并未有实质性提升。
仍是巨慢。哪怕换一台最新i7电脑32G内存,也没多少改善,得到的印象,近乎是当年586/2G的速度。
2023-03-21 10:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2023-3-19 18:50:15的发言:

replace也根本无任何速度优势啊,一样一样的:

replace 看什么状况,如下数据状态,对VFP来说应该是神速了。

CREATE CURSOR 地址汇总表 (地址 v(240))
INSERT INTO 地址汇总表 VALUES ("地址1")
INSERT INTO 地址汇总表 VALUES ("地址2")
INSERT INTO 地址汇总表 VALUES ("地址3")
INSERT INTO 地址汇总表 VALUES ("地址4")
INSERT INTO 地址汇总表 VALUES ("地址5")
CREATE CURSOR 地址更新表 (旧地址 v(240), 新地址 v(240))
INSERT INTO 地址更新表 VALUES ("地址1","地址111")
INSERT INTO 地址更新表 VALUES ("地址3","地址333")
INSERT INTO 地址更新表 VALUES ("地址5","地址555")
INDEX on 旧地址 TAG tag_地址
SELECT 地址汇总表
SET RELATION TO 地址 INTO "地址更新表"
REPLACE 地址 WITH 地址更新表.新地址 FOR FOUND("地址更新表")
SELECT * FROM 地址汇总表

用编码就更可靠准确
CREATE CURSOR 地址汇总表 (编码 c(6), 地址 v(240))
INSERT INTO 地址汇总表 VALUES ("100001","地址1")
INSERT INTO 地址汇总表 VALUES ("100002","地址2")
INSERT INTO 地址汇总表 VALUES ("100003","地址3")
INSERT INTO 地址汇总表 VALUES ("100004","地址4")
INSERT INTO 地址汇总表 VALUES ("100005","地址5")
CREATE CURSOR 地址更新表 (编码 c(6), 旧地址 v(240), 新地址 v(240))
INSERT INTO 地址更新表 VALUES ("100001","地址1","地址111")
INSERT INTO 地址更新表 VALUES ("100003","地址3","地址333")
INSERT INTO 地址更新表 VALUES ("100005","地址5","地址555")
INDEX on 编码 TAG tag_编码
SELECT 地址汇总表
SET RELATION TO 编码 INTO "地址更新表"
REPLACE 地址 WITH 地址更新表.新地址 FOR FOUND("地址更新表")
SELECT * FROM 地址汇总表
2023-03-21 10:50
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
又不是天天改的,慢一点没什么。
难道吃饱没事做,天天去改啊
2023-03-21 23:59
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
收藏
得分:0 
你改成 Select Count(1) from a,b Where 就知道了命中多少记录可以。

设A表地址串有行 a+c, a+b, a+c, a+d 共4行记录,设B表有行a,b,c,d,虽然B表不重复。但你这个 Where 产生的 join 结果会命中16行记录。
2023-03-24 20:27
瓜瓜1990
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:125
专家分:699
注 册:2020-2-25
收藏
得分:0 
对条件中的字段建索引

piu~piu~
2023-03-24 21:12
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:351
专家分:330
注 册:2013-10-4
收藏
得分:0 
若不想费时费力去构造SQL语句,那么转用VFP的“土话”——用Replace替代——有时候确实是非常高效,非常优异的,速度快出不仅仅是一个量级,而是“指数级”!
2023-04-01 22:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用cssnet在2023-4-1 22:31:47的发言:

若不想费时费力去构造SQL语句,那么转用VFP的“土话”——用Replace替代——有时候确实是非常高效,非常优异的,速度快出不仅仅是一个量级,而是“指数级”!

如果单打独斗 Replace 未必都会输给 SELECT - SQL、UPDATE - SQL,是“土枪”还是“洋炮”,有兴趣的可以测试一下。

2023-04-02 10:14
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
收藏
得分:0 
以下是引用吹水佬在2023-4-2 10:14:28的发言:


如果单打独斗 Replace 未必都会输给 SELECT - SQL、UPDATE - SQL,是“土枪”还是“洋炮”,有兴趣的可以测试一下。



不用试了,100% 被 SQL 秒,我都有案例了我只是实在懒得动,几分种变成几百毫秒。
要如何对数据转换才能发挥出 SQL 最大性能这需要稍微动一下心思,而且是不改原表结构也不改变结果输出的情况下,仅在运算时对数据行列转换。
2023-04-02 22:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用倦猫1973在2023-4-2 22:53:46的发言:

不用试了,100% 被 SQL 秒,我都有案例了我只是实在懒得动,几分种变成几百毫秒。
要如何对数据转换才能发挥出 SQL 最大性能这需要稍微动一下心思,而且是不改原表结构也不改变结果输出的情况下,仅在运算时对数据行列转换。


说的是“未必都会”输。
案例也只能说明某种情况。
SQL命令只是集成化高,相对解释语言来说,命令集成化越高运行效率越高,所谓的“一句搞定”就是这意思。
但集成化越高灵活性就越低,SQL命令对一些“复杂度”较高的问题,效率就显得不那么高,甚至不好处理。
“100% 被 SQL 秒”,这个“100%”的说法是不是对这个问题的理解出偏了。
2023-04-03 05:00
倦猫1973
Rank: 2
等 级:论坛游民
威 望:1
帖 子:68
专家分:28
注 册:2022-11-17
收藏
得分:0 
replace 要想发挥出最高性能,表关系是少不了。
SQL 就亲民很多了,原则上是:宁可什么都不做都不可多建索引。直到程序跑不动了,再去想办法。


二者完全适合不一样的应用场景,理论上并没有 PK 的机会。
2023-04-03 07:58
快速回复:SQL语句,where (字段值 Like %子串%) 或者 (atcc(子串, 字段值)>0), ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018738 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved