高分求助一条SQL语句(高级查询),请高手们来,分不够可以继续添加

changlele 2005-03-24 04:33:52
现在有以下这个表

表的结构如下

Publish_SN int(4) 唯一,自动增长
Publish_ID char(255) 唯一,不允许重复


表中有以下的测试数据,Publish_SN因为是自动增长,暂不考虑

Publish_ID
20001/XXXXXXXX
20001/XXXXXXXX
20001/XXXXXXXX
20001/XXXXXXXX
20002/XXXXXXXX
20002/XXXXXXXX
20003/XXXXXXXX
20003/XXXXXXXX



字符串以20001打头的记录有1000条,
字符串以20002打头的记录有450条,
字符串以20003打头的记录有550条,

我想实现把
20001/XXXXXX等数据放到一个页面的DataGrid中
20002/XXXXXX等数据放到一个页面的DataGrid中
20003/XXXXXX等数据放到一个页面的DataGrid中


先说一下我的思路
首先先
Select Publish_ID from Table
把每条数据都取出来之后,每条记录进行字符串分析
定义一个string ListKey[];
一个string链表来记录Publish_ID字符“/”前面的字符串
然后我再一次去查找表中的数据
查询语句如下

Select Publish_ID from Table
where Publish_ID LIKE 'key[/]%'

注明:key就是链表ListKey中的一个值

这种方法我已经作出来了,但是想了又想觉得不妥,因为这种方法速度
太慢,
计算了一下查询的次数如下
如果Publish_ID字符“/”前面的字符串共有7种吧
那查询表的次数为8次
如果是2000条记录,那查询记录8×2000条,
这些都是保守估计,如果1万条记录就更加多了

如果再考虑到代码的效率问题,问题更多,时间效率又会在添加链表的时候
成级数增长,因为你必须对每个Publish_ID字符“/”前面的字符串和链表
中的数据进行比对,使链表中的数据避免重复
这对于一台性能不高的机器简直就是一个灾难。


当然要想解决这种表的问题也很简单,数据库添加一个字段,
专门记录Publish_ID字符“/”前面的字符串,
但是这个数据库是设计师设计的,不允许我再添加一个字段



所以希望大家给我提供一个解决方案,能使这种分页查询速度得以提升
性能得以优化,速度更快





...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
changlele 2005-03-24
  • 打赏
  • 举报
回复
谢谢 youkai(加肥猫)的回复
立马结帖,总算有人明白偶的想法
加上100分表示谢意
熊猫哥 2005-03-24
  • 打赏
  • 举报
回复
SELECT DISTINCT LEFT(Publish_ID, 4) AS Expr1
FROM Table
然后循环分发
changlele 2005-03-24
  • 打赏
  • 举报
回复
To:goldentimecym(振荡波)

我就怕别人这样回答
关键的问题使我不清楚Publish_ID字符“/”前面的字符串
到底都是什么,那换了10001/XXXXXX如何解决。难道让我再重新
编译一次程序,

换句话说就是一切都是由无到有的过程,20001还有20002等等都需要我
自己去获得。
goldentimecym 2005-03-24
  • 打赏
  • 举报
回复
只要设个条件Publish_ID like '20001/%'
就可以了啊
changlele 2005-03-24
  • 打赏
  • 举报
回复
大侠,能否讲的更明白一些
jinjazz 2005-03-24
  • 打赏
  • 举报
回复
不知道vb的数据集有没有filter属性,有的话可以用这个

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧