首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 存储过程查询变慢。。。为什么 [无满意答案结贴,结贴人:xi_ha]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-19 18:05:01 楼主
    数据库是SQL2000
    今天才发现问题,用存储过程查询很慢,cpu显示100%
    如果把存储过程修改下,直接调用用语句很快就查询出来,
    为什么?问题出在那里,我该怎么修改?
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-19 18:06:101楼 得分:0
    用过程根本就查不出来现在,急啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-19 18:08:002楼 得分:0
    贴出代码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-19 19:26:303楼 得分:0
    很有可能在于输入参数的选择性上面


    假设对Name字段做了索引
    where Name like 'ABC%' 和 where Name like '%ABC' 在语句中使用是完全不一样的,'ABC%'可以利用索引,存储过程编译的时候可能吧它编译成 '%ABC' 这样, 具体还是贴语句吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-19 21:05:114楼 得分:0
    清除缓存过程的计划试试

    {RECOMPILE ¦ ENCRYPTION ¦ RECOMPILE, ENCRYPTION}

    RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。

    ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-20 10:40:375楼 得分:0
    清除缓存过程的计划试试
    怎么用啊,告诉我怎么用啊,不明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-20 10:54:066楼 得分:0
    存储过程执行时 第一次执行生成一个执行计划 以后每次执行都按照第一个存储过程的执行计划来执行 如果前后执行的语句不一样
    那么就会很慢

    SQL 语句执行是每次都生成一个新的执行计划的


    创建存储过程时 用 create proc p_name 变量 with recompile
    每次执行存储过程都生成一个新的执行计划
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved