group by 非常慢 怎么办
SQL code
mysql中一万条数据group by非常慢 目前加索引了 还是很慢 
                                SELECT 
                                    IFNULL(FUN_GET_BANK_NAME(CARD_NO), '其他') AS BANKNAME,
                                    IFNULL(FUN_GET_CARD_NAME(CARD_NO), '其他') AS CARDNAME,
                                    COUNT(*) AS COUNT,
                                    SUM(IFNULL(TR_AMT, 0)) AS TR_AMT,
                                    SUM(IFNULL(FEE_AMT, 0)) AS FEE_AMT                
                                FROM T_MIS_LOG t
                                WHERE CONCAT(t.MTI, t.TRAN_TYPE) IN ('0200000000','0290000000')
                                GROUP BY FUN_GET_BANK_NAME(CARD_NO) ,FUN_GET_CARD_NAME(CARD_NO) 
------解决方案--------------------对mysql不太了解,可以转到mysql板块去问一下。
------解决方案-------------------- SELECT  
                                   IFNULL(FUN_GET_BANK_NAME(CARD_NO), '其他') AS BANKNAME,
                                   IFNULL(FUN_GET_CARD_NAME(CARD_NO), '其他') AS CARDNAME,
                                   COUNT(id) AS COUNT
                                  FEE_AMT               
                               FROM T_MIS_LOG t
                               WHERE CONCAT(t.MTI, t.TRAN_TYPE) IN ('0200000000','0290000000')
                               GROUP BY FUN_GET_BANK_NAME(CARD_NO) ,FUN_GET_CARD_NAME(CARD_NO)
然后
  SUM(IFNULL(TR_AMT, 0)) AS TR_AMT
SUM(IFNULL(FEE_AMT, 0)) ASFEE_AMT
分别试一下
看下哪个最慢               
------解决方案--------------------我觉得楼主的SQL 慢在了使用了这两个函数FUN_GET_BANK_NAME(CARD_NO) ,FUN_GET_CARD_NAME(CARD_NO)在SQL  中。group by的字段应该使用表字段会快很多。
如果你系统中有相应的表 保存了card no 和bankname以及cardname的信息,你可以直接把这几个表和T_MIS_LOG 这个进行一个left join,然后再group by。这样会快很多。一万条数据不算大。
------解决方案-------------------- FUN_GET_BANK_NAME 是你自定义的函数?
用户自定义函数效率 必须的低。。。
------解决方案--------------------4.5 楼有理
------解决方案--------------------select  
   IFNULL(FUN_GET_BANK_NAME(CARD_NO), '其他') AS BANKNAME,
   IFNULL(FUN_GET_CARD_NAME(CARD_NO), '其他') AS CARDNAME,
   SUM(COUNT) AS COUNT,
   SUM(TR_AMT) AS TR_AMT,
   SUM(FEE_AMT) AS FEE_AMT
FROM (
 SELECT CARD_NO,
   COUNT(*) AS COUNT,
   SUM(IFNULL(TR_AMT, 0)) AS TR_AMT,
   SUM(IFNULL(FEE_AMT, 0)) AS FEE_AMT               
 FROM T_MIS_LOG t
 WHERE CONCAT(t.MTI, t.TRAN_TYPE) IN ('0200000000','0290000000')
 GROUP BY CARD_NO
) AS prestatic
GROUP BY
   IFNULL(FUN_GET_BANK_NAME(CARD_NO), '其他'),
   IFNULL(FUN_GET_CARD_NAME(CARD_NO), '其他')