我现在有一个表里面有400W数据。 用C#写了循环查询,每次查询3000条。  每次执行一会查询就会卡死。 有没有解决办法?
表结构
   CREATE TABLE `oms_product_dd` (
  `PRODUCT_NO` varchar(13) COLLATE utf8_bin NOT NULL,
  `PRODUCT_NAME` varchar(150) COLLATE utf8_bin NOT NULL,
  `DETAIL_URL` varchar(150) COLLATE utf8_bin NOT NULL,
  `PDT_SPECIALTITLE` text COLLATE utf8_bin,
  `CATEGORY_ID` int(11) DEFAULT NULL,
  `MARKET_PRICE` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  `SALE_PRICE` float DEFAULT NULL,
  `CREATEDDT` datetime DEFAULT NULL,
  `LASTEDITDT` datetime DEFAULT NULL,
  `is_bind` varchar(1) COLLATE utf8_bin NOT NULL DEFAULT 'N',
  KEY `I_DD_PRODUCTON` (`PRODUCT_NO`),
  KEY `I_DD_LASTEDITDT` (`LASTEDITDT`),
  KEY `I_DD_is_bind` (`is_bind`),
  KEY `I_DD_CREATEDDT` (`CREATEDDT`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
查询语句
SELECT PRODUCT_NO,PRODUCT_NAME,DETAIL_URL,PDT_SPECIALTITLE,CATEGORY_ID,MARKET_PRICE,SALE_PRICE,CREATEDDT,LASTEDITDT,MAX(CREATEDDT) FROM oms_product_dd GROUP BY product_NO  LIMIT @begin,@rownum

解决方案 »

  1.   

       SELECT  PRODUCT_NO,PRODUCT_NAME,DETAIL_URL,PDT_SPECIALTITLE,CATEGORY_ID,MARKET_PRICE,SALE_PRICE,CREATEDDT,LASTEDITDT,MAX(CREATEDDT) 
       FROM oms_product_dd 
       GROUP BY product_NO 
       LIMIT @begin,@rownum
     该表没有主键 ,同一个 PRODUCT_NO 会出现多次。 查询是按分组PRODUCT_NO  按时间取最后一条纪录。
      

  2.   

    [Quote=引用 2 楼 lost_c 的回复:]引用 1 楼 wwwwa 的回复:explain sql语句
    我的数据库是MySql的。
      

  3.   

    C#中断点调试,看一下实际要执行的SQL语句是什么,然后直接将这个语句到MYSQL命令行工具中去试一下排除程序方面的干扰。 如果在MYSQL工具中很慢,则用 explain SELECT PRODUCT_NO,PRO .. 贴出执行计划。
      

  4.   

    explain sql语句
    就是MYSQL下的