本帖最后由 czhdhy0524 于 2010-08-21 17:38:36 编辑

解决方案 »

  1.   

    可能是列出现NULL,或LEFT产生的数据多
      

  2.   

    用游标多和not in影响效率
      

  3.   

    查询分析器里执行也会很慢吗?
    左联是可能结果记录数大大增加的
    贴出sql才好。
      

  4.   

    我在mysql里 是可以运行的左联 但在delphi里 就会卡死 
    这是SQL语句 是可以帮忙解决下select a.posuser as 操作员,a.name as 姓名,a.cardimei as 卡号,a.moc_no as 机号,a.customerid as 员工号,a.consumedate as 消费日期,a.consumetime as 消费时间,a.amount as 消费金额,b.dish as 菜名,b.price as 菜单价, 
      case when a.ModeFlag = 2  then  '点菜'   
      when a.ModeFlag = 3  then  '定额'    
      when a.ModeFlag = 4  then  '固定'    
      when a.ModeFlag = 30 then  'AB套餐消费'    
      end as 类型 from    
    (select * from t_fundsflow where ModeFlag=2 or ModeFlag=3 or ModeFlag=4 or ModeFlag=30)as a left join t_dishsales b on a.id=b.fund_id
      

  5.   

    進行SQL多級關聯時,盡量不要用*(要用條件加在後面),你這樣查詢出來的數據太多了,死機必然.......
    select * from t_fundsflow where ModeFlag=2 or ModeFlag=3 or ModeFlag=4 or ModeFlag=30)as a left join t_dishsales b on a.id=b.fund_id
    ....
      

  6.   

    please tryselect a.posuser as 操作员,a.name as 姓名,a.cardimei as 卡号,a.moc_no as 机号,
    a.customerid as 员工号,a.consumedate as 消费日期,a.consumetime as 消费时间,
    a.amount as 消费金额,b.dish as 菜名,b.price as 菜单价,  
    case when a.ModeFlag = 2 then '点菜' when a.ModeFlag = 3 then '定额' 
    when a.ModeFlag = 4 then '固定'  when a.ModeFlag = 30 then 'AB套餐消费' end as 类型 from   
    (select * from t_fundsflow )as a 
    left join t_dishsales b on a.id=b.fund_id 
    where (a.ModeFlag=2 or a.ModeFlag=3 or a.ModeFlag=4 or a.ModeFlag=30)
      

  7.   

    楼上的语句在MYSQL里的确查询速度加快了些 但是放在 delphi里的 adoquery的sql属性里照样死机
    我刚又硬关机了一次
      

  8.   

    mysql据说left join是会很慢
    最近一个做论坛的网友把自己的论坛数据库由mssql换到mysql后,也遇到了mssql据说left join也会很慢
    但是我的实际使用基本没感觉到,上面的例子也说明mssql的left join不慢
      

  9.   

    现在的问题不是MYSQL运行慢 现在的问题是左联语句放delphi里就会死机
      

  10.   

    其实还可以吧你的查询写成临时表,用adotable来直接读取这个临时表,我想这个问题也可以解决的
      

  11.   


    如果說數據量不是非常的龐大,那麼可以做一個提示或進度條來給用戶提示。估計你的代碼有問題,再加之數據量過大,導致這樣的問題那你在查時加這這句:  Application.ProcessMessages;
      

  12.   

    整个流水表也就6W条数据 另一个表最多也就5W条 我觉得是左联这样的语句 是DELPHI本身不兼容 还有楼上说的 写临时表 有什么具体点的什么代码不 对DELPHI了解的不多 不知道怎么创建临时表并把数据怎么按要求导进去
      

  13.   

    跟DELPHI没有关系,不存在兼容问题
    你要执行的SQL语句最终都是在SERVER上执行,你在SERVER上执行你那语句后最终结果是多少条记录?
    可能是结果集太大了,考虑分页查询
      

  14.   

    问题没解决 还是一样 数据量10W条肯定不到 但DELPHI里一用外联肯定卡死 
      

  15.   

    尝试把数据丢入到MS SQL中,然后再连接看看,看看是不是在数据库的层面上看看。你连接mysql是用的什么组件?
      

  16.   

    还有将你的机器的硬件配置,系统环境,还有你的的delphi版本都描述下
      

  17.   

    sql语句在 MYSQL里是能运行的虽然速度不快但还是能运行的 我把SQL语句加到adoquery里就卡死