0 0

mybatis 查询条件中使用find_in_set,效率低的问题5

函数代码:
DELIMITER $$
DROP FUNCTION IF EXISTS `getDivisionChildLst`$$
CREATE  FUNCTION `getDivisionChildLst`(rootId VARCHAR(40)) RETURNS VARCHAR(20000)
BEGIN
         DECLARE sTemp VARCHAR(20000);
         DECLARE sTempChd VARCHAR(20000);
         SET sTemp = '$';
         SET sTempChd = CAST(rootId AS CHAR);
         WHILE sTempChd IS NOT NULL DO
            SET sTemp = CONCAT(sTemp,',',sTempChd);
            SELECT GROUP_CONCAT(id) INTO sTempChd FROM jk_admin_division WHERE FIND_IN_SET(PARENT_ID,sTempChd)>0;
         END WHILE;
         IF sTemp IS NOT NULL THEN
            SET sTemp = SUBSTRING(sTemp,3,LENGTH(sTemp)-1);
         END IF;
         RETURN sTemp;
END$$
DELIMITER ;

查询函数
select getDivisionChildLst(450000))
结果:450000,450100,450126

查询代码:
SELECT
jk_water_works_init.ID,
jk_water_works_init.NAME,
jk_water_works_init.DIVISION_ID,
jk_water_works_init.WORKS_TYPE_ID,
jk_water_works_init.WATER_SOURCE_ID,
jk_water_works_init.GIVE_SCALE,
jk_water_works_init.GIVE_PERSON_NUM,
jk_water_works_init.SET_TIME,
jk_water_works_init.LOCATION,
jk_water_works_init.LONGITUDE,
jk_water_works_init.LATITUDE,
jk_water_works_init.WORKS_FLAG,
jk_water_works_init.REMARK
FROM jk_water_works_init
where FIND_IN_SET(jk_water_works_init.DIVISION_ID, getDivisionChildLst(450000))
结果:500条,总数2500条,耗时2s,太长了,cpu占用偏高

2013年9月11日 14:31

1个答案 按时间排序 按投票排序

0 0

2s的话你得考虑下网速了,

SELECT 
count(0) FROM jk_water_works_init 
where FIND_IN_SET(jk_water_works_init.DIVISION_ID, getDivisionChildLst(450000))
,这个耗时多少?

2013年9月11日 16:13

相关推荐

    mysql中find_in_set函数的基本使用方法

    FIND_IN_SET(str,strlist) 定义 假如字符串str在由多个子链组成的字符串列表strlist中,则返回值的范围在1到N之间。 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。 如果第一个参数是一个...

    Mysql中FIND_IN_SET()和IN区别简析

    在MySQL数据库中,`FIND_IN_SET()` 和 `IN` 是两种不同的查询方法,它们在处理数据集时有不同的特性和应用场景。本文将对这两种方法进行详细对比,以帮助理解它们之间的差异。 `FIND_IN_SET()` 函数主要用于在一个...

    MySql逗号拼接字符串查询的两种方法

    下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5  使用方法: 第一种,传入1,3,6 可以查出来 select * from XXX where FIND...

    完美解决mysql in条件语句只读取一条信息问题的2种方案

    在上述问题中,可以将原来的`IN`语句替换为`FIND_IN_SET()`,如下所示: ```sql SELECT a.id, a.title, b.idlist, b.aid FROM table a, table2 b WHERE FIND_IN_SET(a.id, b.idlist) AND b.aid = 2; ``` 这样,`...

    查询+mybatis+mybatis+查询

    在本文中,我们将学习如何使用MyBatis来查询数据库中的数据。 创建数据库和数据表 首先,我们需要创建一个名为`springboot`的数据库,并创建一个名为`t_user`的数据表。使用以下SQL语句可以创建数据库和数据表: `...

    fluent-mybatis, mybatis语法增强框架

    在 `fluent-mybatis-master` 压缩包中,包含了项目的源码、示例、文档以及构建脚本等资源,开发者可以通过研究这些内容,深入了解如何在实际项目中应用 `fluent-mybatis`,以提升 MyBatis 框架的使用体验。...

    springboot整合mybatis整合jpa使用entityManger

    在本文中,我们将深入探讨如何在Spring Boot项目中整合MyBatis、JPA,并使用EntityManager进行数据访问。同时,我们还将介绍如何集成Redis缓存服务,以及如何对接微信支付和支付宝支付接口,以实现全面的支付功能。 ...

    mybatis 分页类

    在IT行业中,MyBatis作为一个流行的Java持久层框架,提供了灵活的数据访问接口,使得开发者能够更方便地操作数据库。在大型项目中,分页查询是必不可少的功能,它可以帮助用户有效地管理大量的数据,避免一次性加载...

    mybatis-plus-join是mybatis plus的一个多表插件

    mybatis-plus的多表插件完全按照mybats plus的用法来做,支持一对一返回映射,多对多返回映射,自定义返回Vo,自定义表别名,自定义查询字段,你只要会mp,那你就会用mpj,无感引入,不会对之前的业务产生一点点影响...

    MyBatis注解配置映射器:动态SQL的实现

    在上面的例子中,`findAll`方法展示了基本的SQL查询,而`findWithDynamic`方法则使用了动态SQL。当`name`或`age`参数不为空时,相应的条件将被添加到SQL语句中。`#{}`是MyBatis的占位符,用于防止SQL注入。 MyBatis...

    Mybatis3 generator的使用附demo 及sqlserver 分页插件

    在本教程中,我们将探讨如何使用Mybatis Generator以及SQL Server的分页插件。 首先,我们需要了解Mybatis Generator的基本配置。MBG通过一个XML配置文件来定义生成代码的模板和规则。这个配置文件通常命名为`...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    当我们需要在SQL语句中动态添加多个条件时,可以使用`<trim>`标签来处理SQL语句中的前缀或后缀问题。 ```xml SELECT * FROM user ,"> != null"> name = #{name}, != null"> age = #{age} ``` ##### ...

    mongoDB增删改查+前端页面实现+idea+themlesf+mybatis

    在本项目中,我们将探讨如何使用MongoDB进行数据的增删改查操作,以及如何结合前端页面、IntelliJ IDEA开发环境、Thymeleaf模板引擎和MyBatis持久层框架来构建一个完整的应用程序。 首先,让我们深入了解MongoDB的...

    mybatis分页及模糊查询功能实现

    在实际开发中,分页和模糊查询是最常用的功能,下面我们将详细介绍MyBatis如何实现分页和模糊查询功能。 一、MyBatis分页实现 MyBatis提供了三种方式来实现分页,每种方式都有其优缺,下面我们将详细介绍每种方式...

    MyBatis动态SQL是一项强大的特性,它允许我们在编写SQL语句时根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的

    在这个例子中,只有当`username`或`email`不为`null`时,相应的SQL条件才会被添加到最终的查询语句中。 #### 、、 这三个元素一起工作,类似于编程语言中的`switch`语句,可以根据不同的条件选择不同的SQL分支。...

    mybatis动态sql之Map参数的讲解

    在MyBatis中,我们可以使用两种方式来传递Map参数:方式一是使用parameterType="Map"方式,例如: ```xml <update id="publishT00_notice" parameterType="Map"> update test set createdate = #{createdate}, ...

    mybatis入门

    在使用 MyBatis 之前,首先需要在项目中添加 MyBatis 的相关 JAR 包。通常情况下,需要以下三个 JAR 包: - `mybatis-3.0.5-javadoc.jar`:文档包,提供 API 文档。 - `mybatis-3.0.5-sources.jar`:源码包,包含 ...

    Mybatis如何通过注解开启使用二级缓存

    "Mybatis 中通过注解开启使用二级缓存" Mybatis 是一个基于 Java 的持久层框架,它提供了一个简单易用的方式来访问数据库。二级缓存是 Mybatis 中的一种缓存机制,它可以将查询结果缓存起来,减少数据库的访问次数...

Global site tag (gtag.js) - Google Analytics