10万以上数据查询-存储过程实现


需求:有如下两张表,其中tb_web_app表中数据有十万甚至百万,另,tb_web_app表中的c_category_code关联表tb_system_category中的c_code字段。
  1. CREATE TABLE `tb_system_category` (  
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  3.   `c_parent_id` int(11) NOT NULL,  
  4.   `c_name` varchar(50) NOT NULL,  
  5.   `c_full_name` varchar(200) DEFAULT NULL,  
  6.   `c_code` varchar(50) NOT NULL,  
  7.   `c_describe` text,  
  8.   PRIMARY KEY (`id`)  
  9. ) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8;  
  10.   
  11.   
  12. CREATE TABLE `tb_web_app` (  
  13.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  14.   `c_name` varchar(255) NOT NULL,  
  15.   `c_package_name` varchar(255) NOT NULL,  
  16.   `c_category_code` varchar(50) NOT NULL DEFAULT '0',  
  17.   PRIMARY KEY (`id`)  
  18. ) ENGINE=InnoDB AUTO_INCREMENT=138583 DEFAULT CHARSET=utf8;  

        要求分页查询tb_web_app表,并显示其c_category_code对应的c_full_name(来自tb_system_category)。

        笔者先是使用sql联表语句进行查询,不外乎left join等语句的使用,结果发现执行速度巨慢无比,遂转成存储过程实现,存储过程代码如下所示:

  1. CREATE PROCEDURE findWebappAndCategory(IN cName VARCHAR(255), IN pName VARCHAR(255), IN cCategoryCodes VARCHAR(100), IN cID INTEGER, IN cType VARCHAR(50), IN startRow INTEGER, IN pageSize INTEGER)  
  2. BEGIN  
  3.     DECLARE cRand VARCHAR(50) DEFAULT RAND();  
  4.     -- 创建临时表  
  5.     CREATE TEMPORARY TABLE IF NOT EXISTS tb_system_temp_wac(  
  6.         id INTEGER,  
  7.         c_name varchar(255),  
  8.         c_package_name varchar(255),  
  9.         c_category_code varchar(50),  
  10.         categoryName VARCHAR(255),  
  11.         cRand VARCHAR(50)  
  12.     );  
  13.       
  14.     -- 按条件找到webapp  
  15.     CALL findWebapp(cName,pName,cCategoryCodes,cID,cType,startRow,pageSize,cRand);  
  16.     -- 将找到的webapp的c_category_code的值进行替换  
  17.     CALL generateCategoryName(cRand);  
  18.       
  19.     -- 返回结果  
  20.     SET @mySql = CONCAT('select * from tb_system_temp_wac where cRand=\'',cRand,'\'');  
  21.     PREPARE stmt FROM @mySql;  
  22.     EXECUTE stmt;  
  23. END  
  • 1
  • 2
  • 下一页

相关内容