精华内容
下载资源
问答
  • 在MySQL中经常会去优化查询,其目的找到一种更快,效率更高的一种方式去获取查询结果。一般情况下通过优化SQL语句来提高效率,例如增加索引,使用需要的字段代替”*“号等。还有一种优化方式--重构查询的方式,...

    在MySQL中经常会去优化查询,其目的是找到一种更快,效率更高的一种方式去获取查询结果。一般情况下是通过优化SQL语句来提高效率,例如增加索引,使用需要的字段代替”*“号等。还有一种优化方式--重构查询的方式,将一个复杂的查询拆成多个查询来提高效率。下面就具体介绍下:

      1、在设计查询是选择一个复杂查询还是多个简单查询。

      对于在设计查询是选择一个复杂查询还是多个简单查询,这个需要从多方面来考虑。例如:

      1)、应用程序连接数据库和断开连接的性能消耗,耗费时长。不同数据库的性能消耗和耗费时长是不一样的。(在MySQL中连接和断开连接是轻量级的)

      2)、在查询效率和数据库性能方面,在都能实现业务的情况下选择查询效率高且不影响数据库性能的方式。

      3)、考虑实际的业务场景适合哪种查询。

      注:设计查询时,在保证效率、性能以及对数据库的影响的前提下,尽量选择一条查询语句来实现;

      2、切分查询

      什么是切分查询,就是将一个大查询拆分成多个小查询,每次完成一部分,分多次完成。例如:删除数据库中不需要的数据或对同一条件修改大量数据时,可能需要一次对大量数据进行加锁且占满整个事务日志,造成多个其他的小查询阻塞,系统资源消耗,并且会增加MySQL主从同步的延迟。这个时候就可以分成多个较小的查询来完成,尽可能地减小多MySQL的影响。具体例子看下图:

      e48cea945c86e88c4965c2a898b22c01.png

      3、分解关联查询

      什么是分解关联查询,简单来说就是将一个关联多表的查询的语句,分解成多个查询单表或者说简单查询的语句,通过这种方式来提高SQL语句的效率,降低MySQL的性能消耗。下面通过实例具体讲解下:先准备基础数据:

      人员表user

      59b0c2e3903e87c553e9d282014553ab.png

      订单表 order

      ab4b8efbb0de54b77a44b0dfafe9a11d.png

      订单明细表 orderitem

      52e35ebe235c32a58db878713702da77.png

      例如上面三个表,我们需要查询出性别为男的订单里面有哪些货号(articleNumber)?,通常会这么去写SQL语句:

      select oi.articleNumber from user u inner join order o on u.username=o.creater inner join orderitem oi on o.id=oi.orderid where u.sex='男';

      当数据量过大时,这样关联查询可能会比较慢,影响数据库性能。这个时候我们就可以将这个关联查询语句进行分解。分解成如下的语句:

      select username from user where sex='男';

      select id from order where creater in ('001','003');

      select articleNumber from orderitem where orderid in(1,3);

      这样就可以让一个关联查询分解成了多个单表查询的,这样的好处有以下几点:

      1)、单表查询容易使用到缓存,提高效率;

      2)、单表查询可以减少锁的竞争,不容器造成阻塞在应用层做关联;

      3)、可以更容易对数据库进行拆分,更容易做到高性能和可扩展;

      4)、单表查询更容易走索引,且不用回表;

      5)、可以减少冗余记录的查询,减少不必要的数据加载到内存当中;

      6)、更进一步,这样做相当于在应用层中实现了哈希关联,而不是使用MySQL的嵌套循环关联;

    展开全文
  • 在web开发时我们时常需要进行分页查询,其中就可以设计为两部分,通用部分,也即各个查询对象可能都有的部分,进行抽取出来,作为个基础查询的对象,同时针对不同的具体情况,有需要有合理的对不同情况设置...

    在web开发时我们时常需要进行分页查询,其中就可以设计为两部分,一个是通用部分,也即各个查询对象可能都有的部分,进行抽取出来,作为一个基础查询的对象,同时针对不同的具体情况,有需要有合理的对不同情况设置查询关键字,这部分可以具体为不同的对象,这同时继承基础查询对象,这样就完成各种不同的查询对象的建立,比如如下:

    一,抽象出来的共有查询特性

    
    package com.xxx.param;
    
    
    public class BaseParam {
    	private Long previousPage;
    	private Long nextPage;
    	private Long totalRecord;
    	private Long totalPage;
    	private Long offsetRecord;
    	
    	//below is for easyui parameter
    	private Long rows; 		//pageSize
    	private Long page;		//current page number 
    	private String sort;	//sort field name
    	private String order;	//asc or desc
    	
    	public BaseParam() {
    		this.previousPage = 1L;
    		this.nextPage = 1L;
    		this.totalRecord = 1L;
    		this.totalPage = 1L;
    		
    		this.rows = 10L;
    		this.page = 1L;
    		this.sort = "";
    		this.order = "";
    	}
    
    	public Long getPreviousPage() {
    		previousPage = page - 1;
    		if(previousPage < 1){
    			previousPage = 1L;
    		}
    		return previousPage;
    	}
    
    	public void setPreviousPage(Long previousPage) {
    		this.previousPage = previousPage;
    	}
    
    	public Long getNextPage() {
    		if(nextPage > totalPage){
    			nextPage = totalPage;
    		}
    		return nextPage;
    	}
    
    	public void setNextPage(Long nextPage) {
    		this.nextPage = nextPage;
    	}
    
    	public Long getTotalRecord() {
    		return totalRecord;
    	}
    
    	public void setTotalRecord(Long totalRecord) {
    		if(totalRecord < 0){
    			totalRecord = 0L;
    		}
    		this.totalRecord = totalRecord;
    	}
    
    	public Long getTotalPage() {
    		if(totalRecord != null && rows != null){
    			totalPage = (totalRecord % rows == 0) ? (totalRecord / rows) : (totalRecord / rows + 1);
    		}else{
    			totalPage = 1L;
    		}
    		return totalPage;
    	}
    
    	public void setTotalPage(Long totalPage) {
    		this.totalPage = totalPage;
    	}
    
    	public Long getRows() {
    		if(rows < 1){
    			rows = 1L;
    		}
    		return rows;
    	}
    
    	public void setRows(Long rows) {
    		this.rows = rows;
    	}
    
    	public Long getPage() {
    		if(page < 1){
    			page = 1L;
    		}
    		return page;
    	}
    
    	public void setPage(Long page) {
    		this.page = page;
    	}
    
    	public String getSort() {
    		return sort;
    	}
    
    	public void setSort(String sort) {
    		this.sort = sort;
    	}
    
    	public String getOrder() {
    		return order;
    	}
    
    	public void setOrder(String order) {
    		this.order = order;
    	}
    
    	public Long getOffsetRecord() {
    		
    		/*
    		//------------------------------------
    		// max method/max方式
    		if(page != null && rows != null){
    			if(page < 1){
    				page = 1L;
    			}
    			offsetRecord = (page - 1) * rows + 1;
    		}else{
    			offsetRecord = rows ; 
    		}
    		//------------------------------------
    		*/
    		
    		/*
    		//------------------------------------
    		//top method/top方法
    		if(page != null && rows != null){
    			if(page < 1){
    				page = 1L;
    			}
    			offsetRecord = page * rows ;
    		}else{
    			offsetRecord = rows; 
    		}		
    		//------------------------------------
    		*/		
    		
    		
    		//------------------------------------
    		//row_number() over(order by xxx [asc|desc]) method,support ms sql2005+
    		//row_number() over(order by xxx)方法
    		
    		if(page != null && rows != null){
    			if(page < 1){
    				page = 1L;
    			}
    			if(page > getTotalPage()){
    				page = getTotalPage();
    			}
    			offsetRecord = (page - 1) * rows ;
    		}else{
    			offsetRecord = 0L; 
    		}		
    		//------------------------------------
    		
    		return offsetRecord;
    	}
    	
    	public void setOffsetRecord(Long offsetRecord) {
    		this.offsetRecord = offsetRecord;
    	}
    
    }
    

    二,针对不同的具体情况,除了有自己的查询关键字,同时继承基本查询对象,比如国家相关信息的查询,除了有基础的查询外,还有国家相关的名称,ISO代码,域名等不同的信息查询,比如下面:

    
    package com.xxx.param;
    
    import com.xxx.model.CountryInfo;
    
    public class CountryInfoParam extends BaseParam {
    	private CountryInfo country;
    	private Integer countryId;
    	private String countryIsoCode;
    	private String countryDomainName;
    	private String countryName;
    	private String showFlag;
    	
    	public CountryInfoParam() {
    		super();
    	}
    	
    	public CountryInfo getCountry() {
    		return country;
    	}
    	public void setCountry(CountryInfo country) {
    		this.country = country;
    	}
    	
    	public Integer getCountryId() {
    		return countryId;
    	}
    	public void setCountryId(Integer countryId) {
    		this.countryId = countryId;
    	}
    	
    	public String getCountryIsoCode() {
    		return countryIsoCode;
    	}
    	public void setCountryIsoCode(String countryIsoCode) {
    		this.countryIsoCode = countryIsoCode;
    	}
    	
    	public String getCountryDomainName() {
    		return countryDomainName;
    	}
    	public void setCountryDomainName(String countryDomainName) {
    		this.countryDomainName = countryDomainName;
    	}
    	
    	public String getCountryName() {
    		return countryName;
    	}
    	public void setCountryName(String countryName) {
    		this.countryName = countryName;
    	}
    
    	public String getShowFlag() {
    		return showFlag;
    	}
    	public void setShowFlag(String showFlag) {
    		this.showFlag = showFlag;
    	}
    	
    }
    

    基础查询共性相同,针对不同 model 可以建立不同的 model 的查询 param 对象,基础基础查询,即可得到即灵活又有共性的 各种查询对象,在实际应用中,非常方便....

    欢迎拍砖讨论... 懒人计划大笑... 


    展开全文
  • 一种方案DAO层的函数方法public User selectUser(String name,String area);对应的Mapper.xmlselect * from user_user_t where user_name = #{0} and user_area=#{1}其中,#{0}代表接收的dao层中的第一个参数,#...

    第一种方案

    DAO层的函数方法

    public User selectUser(String name,String area);

    对应的Mapper.xml

    select * from user_user_t where user_name = #{0} and user_area=#{1}

    其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

    第二种方案  此方法采用Map传多参数.

    Dao层的函数方法

    public User selectUser(Map paramMap);

    对应的Mapper.xml

    select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,jdbcType=VARCHAR}

    Service层调用

    public User xxxSelectUser(){

    Map paramMap=new hashMap();

    paramMap.put(“userName”,”对应具体的参数值”);

    paramMap.put(“userArea”,”对应具体的参数值”);

    User user=xxx.selectUser(paramMap);

    }

    个人认为此方法不够直观,见到接口方法不能直接的知道要传的参数是什么。

    第三种方案

    Dao层的函数方法

    public User selectUser(@Param("userName")String name,@Param("userArea")String area);

    对应的Mapper.xml

    select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,jdbcType=VARCHAR}

    个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用此种方案。

    ---------------------

    作者:zhw0596

    来源:CSDN

    原文:https://blog.csdn.net/zhw0596/article/details/81482770

    ------------------------------------------------------------------------------------------------------

    当只向xxxMapper.xml文件中传递一个参数时,可以简单的用“_parameter”来接收xxxMapper.java传递进来的参数,并代入查询。

    但是,如果在xxxMapper.java文件中传递进来多个参数,就不能使用上面这种形式来接收参数,这时可以有两种方案来解决这个问题:

    一 向xml文件中传递进去一个Map集合,然后xml文件中就可以正常使用Map集合中的各个参数了。

    具体实例如下:

    (1)xxxMapper.java文件中这样定义:

    List findAll(Map parms);

    (2)在用到上面定义的具体实现类中给Map传参:

    展开全文
  • URLSearchParams()个构造函数,将返回个可以操作查询字符串的对象。 常用方法: 1、构造查询字符串 const query = new URLSearchParams(); query.append("a", 1); query.append("b", 2); con...

    URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

    URLSearchParams()是个构造函数,将返回一个可以操作查询字符串的对象。

    常用方法:

    1、构造查询字符串

    const query = new URLSearchParams();
    query.append("a", 1);
    query.append("b", 2);
    const queryString = query.toString(); // "a=1&b=2"
    const url = `https://www.abc.com?${query}`; // 将自动调用query的toString()方法

    2、获取查询字符串参数

    // current url: https://www.abc.com?a=1&b=2 
    const query = new URLSearchParams(location.search);
    query.get("a"); // "1"
    query.get("b"); // "2" 
    query.getAll("a"); // ["1"] 

    兼容性:

    兼容性较差

    建议使用polyfill:https://github.com/WebReflection/url-search-params

    来源:https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams

    转载于:https://www.cnblogs.com/zczhangcui/p/9347401.html

    展开全文
  • 要获得一个参数查询,你需要以一种特定的方式来编写你的代码,或它需要满足一组特定的标准。有两种不同的方式来创建参数查询。第一个方式查询优化器自动地参数化你的查询。另一个方式通过以一个特定方式来...
  • 前端中,获取url中的查询参数是我们经常遇到的问题,下面就列出3种获取查询参数的方法: 第一种: 通过正则表达式匹配参数(markdown编辑器js注释颜色太暗,故下面汉字需要加 "//"改成js注释在运行) function regExp...
  • 一种方案 DAO层的函数方法: public User selectUser(String name,String area); 对应的Mapper.xml: <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_...
  • 要获得一个参数查询,你需要以一种特定的方式来编写你的代码,或它需要满足一组特定的标准。  有两种不同的方式来创建参数查询。第一个方式查询优化器自动地参数化你的查询。另一个方式通过以一个特定...
  • 引入在数据库中,经常要实现查询操作,而且查询条件不断根据实际情况动态变化的,以简书...通过Java操作的话,我们不可能每情况都写查询方法,最有效的方法应该:只写个方法,让他自己检测参数个数,获...
  • 1.URL参数查询

    2021-04-13 10:13:45
    Servlet , 服务小程序 , Java Web 的一个重要概念,一种为客户端提供自定义服务的机制。 URL参数 如果要查询学号从20210002到20210004的学生数据,客户端需要把请求的参数发给服务器 。请求的参数可以附在URL...
  • 转自:... 对于mybatis的参数类型集合数组的时候进行查询。顺便回忆一下。有两种处理方式。 第一种参数list 使用mybatis的标签 SELECT* FROMTABLE_NAME AS a WHERE a.id not in #{extraId...
  • 参数查询

    2016-03-05 09:14:38
    SQL参数查询 、以往的防御方式 以前对付这种漏洞的方式主要有三: 字符串检测:限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点,系统 中不可避免地会...
  • 引入在数据库中,经常要实现查询操作,而且查询条件不断根据实际情况动态变化的,以简书...通过Java操作的话,我们不可能每情况都写查询方法,最有效的方法应该:只写个方法,让他自己检测参数个数,获...
  • !... 如图 我想拿 物理 化学 生物 去查询的话 同时含有这三个值的字段要出来,...换一种说法 我三个参数是 3、7 、8 查询出来的结果 应该出现 例如 3, 7/3,8/7,3/7/8,8/3/7 但是不应该出现 3/6/8或者 3/7/9 这样的数据
  • 这篇文章主要为大家详细介绍了php通过参数查询防止sql注入的...php中通过参数查询防止sql注入,有两方法,一是通过pdo,一是通过mysqli使用 PDO:/*** php中通过参数查询防止sql注入** @param* @arrange 51...
  • 一种参数list使用mybatis的标签SELECT * FROM TABLE_NAME AS aAND a.constomer_grade in#{extraId}参数讲解的:collection:需要循环的集合item:每次循环的参数名字index:索引(0开始)separator:分隔符open:...
  • 参数查询使用参数查询的情景有很多,但最常用的情景需要用户在查询中进行输入的情况。...第二种方法构造一种参数查询。在开始时执行如下所示的基本查询:1 select count(*) fromUserInfo234 where UserN...
  • MySQL的慢查询,全名查询日志,MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。long_query_time的...
  • Mybatis多参数条件查询

    千次阅读 2019-01-03 20:42:34
    我个人测试的有两种比较好用的方法,第一种是使用占位符标志,这种方式无脑通俗易懂,推荐使用,第二种使用map集合来充当参数,使用Map集合的K作为参数传递在mapper.xml映射文件中。   首先因为mybatis非常简单...
  • 参数级联查询是查询控件之间的一种互动方式,比如在某个下拉框选定选项后,另一个下拉框里的选项范围会随之变化。润乾报表提供了多种编辑风格,每种编辑风格都有丰富的属性,以此为基础实现参数级联查询也很简单。...
  • 参数级联查询是查询控件之间的一种互动方式,比如在某个下拉框选定选项后,另一个下拉框里的选项范围会随之变化。润乾报表提供了多种编辑风格,每种编辑风格都有丰富的属性,以此为基础实现参数级联查询也很简单。...
  • 假如遇到一种需求,查询一个人,顺便要求把他的下属职员的信息也搜出来,那么就需要用到关联查询   那么这样查询的话返回值肯定不能resultType了 得靠resultMap来映射一下   resultMap里的属性标签 &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,779
精华内容 1,911
关键字:

参数查询是一种