表中有一个type字段,值可能为1,2,3等,
现在我想获得
  type值为1的记录数,
  type值为2的记录数,
  type值为3的记录数
作为绑定html控件的数据源
sql语句:
DECLARE @a INT,@b INT ,@c INT 
SELECT COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=1
SELECT COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=2 
SELECT COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=3 
SELECT @a,@b,@c
接受数据的页面每刷新一次都要访问数据库,这种方法效率高吗?
我想的另一个思路是新建一个表typecount,用于保存type的各个值的记录数,然后建立触发器,向MarketInfo 表中插入信息时同时向typecount中插入信息
这样页面访问数据库时就不需要执行select count(*)语句,直接从typecount表中取出就行了
这两种方法那种好?
或者还有更好的方法?

解决方案 »

  1.   

    DECLARE @a INT,@b INT ,@c INT 
    SELECT @a=COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=1
    SELECT @b=COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=2 
    SELECT @c=COUNT(*) FROM dbo.MarketInfo WHERE dbo.MarketInfo.type=3 
    SELECT @a,@b,@c
    是这样子吧。可以像2楼说的使用缓存机制,并与数据库表建立依赖,每插入一条记录就更新缓存
      

  2.   

    那你直接创建一个视图表就行了,在视图表中根据不同type值,统计一下,然后在程序中直接调用视图表,这样还能提高点性能。
      

  3.   

    创建个类似的函数吧create function dbo.getcount
    (
    @type int
    )
    return int
    as
    begin
    declare @t int
    select @t=count(*) from  dbo.MarketInfo where type=@type;
    return @t
    end 
      

  4.   


    SELECT distinct type,dbo.getcount(type) FROM dbo.MarketInfo根据创建的函数直接取就行了。
      

  5.   


    count(pk) 主键 会比 count(*) 速度快些
    select 单个字段 会比 count(pk)  快些, 不过不明显.
    你应用count(pk) 就可以了。
    真想提速,应该应用缓存
      

  6.   

    <td align="left" style="width: 282px"> <asp:RadioButtonList runat="server" ID="RadioButtonList1" OnInit="get_rbut_list" TextAlign="Left" RepeatDirection="Vertical"> </asp:RadioButtonList> </td> 
    <td align="center"> <asp:TextBox runat="server" ID="texbos_1"> </asp:TextBox> </td> 
     
    ID = RadioButtonList_x 着里的 X 怎么动态加上啊!! 
    还有就是 OnInit ="get_rbut_list" 中的 get_rbut_list 方法 能写成 OnInit ="get_rbut_list(参数名)" 
    帮帮忙!以后有分给加上!好吗?
      

  7.   

    用缓存,很简单的,用HttpRuntime.Cache.Insert方法
    每插入一条记录就更新缓存