欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入探究MySQL中使用where 1=1是否存在性能影響

 更新時間:2024年02月20日 11:00:21   作者:Lorin洛林  
最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下

前言

  • 最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響。
<select id="" parameterType = "">
	SELECT * FROM users 
	WHERE 1=1
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
</select>

聊聊 mybatis 中多條件拼接的兩種常規(guī)寫法

where 1=1

  • 如前言中的示例:
<select id="" parameterType = "">
	SELECT * FROM users 
	WHERE 1=1
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
</select>

使用 <where> 標簽

  • mybatis 提供 <where> 標簽,<where> 標簽只有在一個以上的if條件有值的情況下才去插入WHERE子句。若AND 或 OR 前沒有有效語句,where 元素會將它們去除。
<select id="" parameterType = "">
	SELECT * FROM users 
	<where>
		<if test="userName != null ">
			AND user_name = #{userName}
		</if>
		<if test="userAge != null ">
			AND user_age = #{userAge }
		</if>
		<if test="userSex!= null ">
			AND	user_sex = #{userSex}
		</if>
	</where>
</select>

性能影響

  • where 1=1 和 <where> 標簽兩種寫法前者性能損耗在 SQL查詢性能優(yōu)化,后者在于 SQL 語句動態(tài)生成 。下面我們來具體分析一下:
  • MySQL 版本:
SELECT VERSION();

5.7.44

# 數(shù)據(jù)構造 SQL
CREATE TABLE IF NOT EXISTS t_user
(
  id INT not null auto_increment primary key comment '自增ID',
  name varchar(20) comment '姓名',
  age tinyint  comment '年齡'
)ENGINE = INNODB;


INSERT INTO t_user ( NAME, age ) VALUES ( '張三', 18 ),( '李四', 19 ),( '王五', 20 ),( '司總', 21 );

where 1=1

  • 在 5.7 以上版本中,SQL查詢性能優(yōu)化 會將 1=1 部分優(yōu)化掉,并不會影響索引,但網上有部分資料說在低版本中有一定影響,所以需要稍微留意一下。
# 注:需要選中一起執(zhí)行可以查看到優(yōu)化后的 SQL
explain select * from t_user where 1=1 AND name = '張三';
show warnings;

# 優(yōu)化后的 SQL
/* select#1 */ SELECT
`mydatabase`.`t_user`.`id` AS `id`,
`mydatabase`.`t_user`.`name` AS `name`,
`mydatabase`.`t_user`.`age` AS `age` 
FROM
	`mydatabase`.`t_user` 
WHERE
	(
	`mydatabase`.`t_user`.`name` = '張三')
  • 從優(yōu)化后的 SQL 可以看到, 1=1 部分已經被查詢優(yōu)化器優(yōu)化掉,所有對整體的性能影響并不大。
# 性能對比
select * from t_user where 1=1 AND name = '張三'
> OK
> 查詢時間: 0.046s

select * from t_user where 1=1
> OK
> 查詢時間: 0.046s

<where> 標簽

  • 相比于 where 1=1 在 MySQL 中服務器層由查詢優(yōu)化器進行處理,<where> 標簽在動態(tài)構建 SQL 中處理,但性能也無很大影響,因為本質并不是很復雜的動態(tài) SQL 生成。

總結

  • where 1=1<where> 標簽是多條件拼接的兩種常見寫法,性能層面而言并沒有較大的影響,具體選擇何種寫法可以根據(jù)團隊的規(guī)范決定。
  • 此外兩種方案的處理與處理的數(shù)據(jù)量無關,一次執(zhí)行都僅處理一次,所以在大數(shù)據(jù)量下也無性能差異。

以上就是深入探究MySQL中使用where 1=1是否存在性能影響的詳細內容,更多關于MySQL where 1=1性能影響的資料請關注腳本之家其它相關文章!

相關文章

  • 安裝mysql noinstall zip版

    安裝mysql noinstall zip版

    沒用過mysql, 這幾天折騰django ,發(fā)現(xiàn)連接mssql好像還是有些小bug,為了防止日后項目有些莫名的db故障,故選擇django推薦之一的mysql
    2011-12-12
  • SQL實戰(zhàn)演練之網上商城數(shù)據(jù)庫用戶信息數(shù)據(jù)操作

    SQL實戰(zhàn)演練之網上商城數(shù)據(jù)庫用戶信息數(shù)據(jù)操作

    一直認為,扎實的SQL功底是一名數(shù)據(jù)分析師的安身立命之本,甚至可以稱得上是所有數(shù)據(jù)從業(yè)者的基本功。當然,這里的SQL絕不單單是寫幾條查詢語句那么簡單,接下來請跟著小編通過案例項目進一步提高SQL的能力吧
    2021-10-10
  • Java的Struts框架中append標簽與generator標簽的使用

    Java的Struts框架中append標簽與generator標簽的使用

    這篇文章主要介紹了Java的Struts框架中append標簽與generator標簽的使用方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • MySQL數(shù)據(jù)處理梳理講解增刪改的操作

    MySQL數(shù)據(jù)處理梳理講解增刪改的操作

    本篇文章旨在介紹如何使用數(shù)據(jù)處理函數(shù),和其他大多數(shù)計算機語言語言,MYSQL支持利用函數(shù)來處理數(shù)據(jù),函數(shù)也就是一般在數(shù)據(jù)上執(zhí)行,它給數(shù)據(jù)的轉換和處理提供了方便
    2022-05-05
  • Mysql復合主鍵和聯(lián)合主鍵的區(qū)別解析

    Mysql復合主鍵和聯(lián)合主鍵的區(qū)別解析

    這篇文章主要介紹了Mysql復合主鍵和聯(lián)合主鍵的區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • MySQL中常用的一些日期和時間函數(shù)

    MySQL中常用的一些日期和時間函數(shù)

    MySQL日期和時間函數(shù)是MySQL中的一個重要組件,它提供了一些有用的函數(shù)來處理日期和時間數(shù)據(jù),這篇文章主要給大家介紹了關于MySQL中常用的一些日期和時間函數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • MySQL 5.6.51 解壓版(zip版)安裝配置圖文方法

    MySQL 5.6.51 解壓版(zip版)安裝配置圖文方法

    這兩天剛試用了一下MySQL5.6.51,感覺還不錯,有兄弟戲稱是一個高富帥版本?,F(xiàn)將MySQL5.6.51 zip解壓版本的安裝配置過程記錄如下,希望能給需要安裝該版本的朋友一點參考作用
    2015-08-08
  • Windows下實現(xiàn)MySQL自動備份的批處理(復制目錄或mysqldump備份)

    Windows下實現(xiàn)MySQL自動備份的批處理(復制目錄或mysqldump備份)

    Windows下實現(xiàn)MySQL自動備份的批處理,新建目錄并復制壓縮,結合windows計劃任務方便實現(xiàn)每天的自動備份
    2012-05-05
  • MySQL查看數(shù)據(jù)庫表容量大小的方法示例

    MySQL查看數(shù)據(jù)庫表容量大小的方法示例

    這篇文章主要介紹了MySQL查看數(shù)據(jù)庫表容量大小的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略

    MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略

    這篇文章主要給大家介紹了關于MySQL插入數(shù)據(jù)insert?ignore語法重復數(shù)據(jù)自動忽略的相關資料,最近工作中使用到了insert ignore into語法,感覺這個語法還是挺有用的,就記錄下來做個總結,需要的朋友可以參考下
    2023-08-08

最新評論