| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1408 人关注过本帖
标题:VFP9的问题?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
SQL SELECT最主要的一个特点,是它会根据查询需要自动建立临时索引,哪怕你的表本来没有索引,它也是会自己建的,只不过查询完毕后会删除掉,这也这类语句占用资源大的主要原因。无论是SQL SELECT还是VFP内部的检索指令,高效的关键点是索引。VFP之所以高速无与伦比的技术原因是它的索引文件高效,内嵌的SQL指令是使用自身检索技术实现的,但是这种索引数据结构的关键字(Key)却有局限性,不能太大,否则用于比较关键字的时间会过长,抵消高效,这就是它的索引字段长度有限制的原因——其他的大型数据库因为需要对更多种类的数据类型字段也能检索,没有这种限制,故在它们的SQL SELECT算法中就不会出现这种问题。对某些涉及备注型字段的查询,若算法需要此字段有索引才能提速,那么SQL SELECT算法会替这个字段建立索引,而这个索引被VFP自身的索引文件机制限制。

这里,同时也解释了VFP的SQL SELECT有独特扩展和为什么存在不与标准SQL SELECT语法完全一致的原因。

授人以渔,不授人以鱼。
2015-12-15 11:01
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用吹水佬在2015-12-15 09:21:46的发言:

既然运行异常提示与排序有关,distinct子项内部执行应该与索引有关,类似:INDEX ON 的 UNIQUE 子项。
还有:

谢谢,其实我的备注,并不是备注字段,是C(252),只是我用来做备注,懒得用备注字段。
2015-12-15 13:31
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用mywisdom88在2015-12-15 13:31:33的发言:

 
谢谢,其实我的备注,并不是备注字段,是C(252),只是我用来做备注,懒得用备注字段。
那就是受到了索引关键字字符数的限制。你DISTINCT三个字段,内部的执行是,依次按你列出的顺序作为第一、二、三关键字进行叠加排序,类似于 INDEX ON 第一关键字+第二关键字+第三关键字 这种。那么中间这个表达式的值字符数就不能高于240个(一个全角字符算2个字符),这就是帮助文件里说的索引关键字不能超过240个字符。
2015-12-15 14:38
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
以下是引用mywisdom88在2015-12-14 23:35:03的发言:

我有个字段,长度是252,我发现当我内容超过240的时候,会报错?
SELECT DISTINCT 编号,收据号,备注 from sql_tab1
查出报错的字段是“备注”
我检查字段的内容,发现,这个备注的字段内容长度超过240的时候,就报错
错误信息是:建立排序键错误,
代码是:2186
但这是语句在SQL查询分析器中,运行时没问题的?
为什么?
我本备注字段的内容长度少于240,就可以了。。

1。VFP6.0 没这问题
2。在VFP9。0 如果不考虑"备注"字段重复问题,可以这样
SET ENGINEBEHAVIOR  70
SELECT 编号,收据号,备注 from sql_tab1 GROUP BY 编号,收据号
SET ENGINEBEHAVIOR  90

2015-12-17 11:01
快速回复:VFP9的问题?
数据加载中...
 
   



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

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