MySQL mybatis的SQL優化方案

2022-03-04 22:42:39 字數 2522 閱讀 3869

sql優化方案:

1.新增索引,在條件引數,關聯引數上建立引數,

2.欄位優化,需要什麼字段查什麼字段

3.模糊查詢盡量使用: select * from tablename a where a.name like 'name%'

避免使用 '%name%' 和 '%name';

3.利用explain 分析sql

id

select識別符。這是select的查詢序列號

select_type

select型別,可以為以下任何一種:

table

輸出的行所引用的表

type

聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:

possible_keys

指出mysql能使用哪個索引在該表中找到行

key

顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null。

key_len

顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。

ref

顯示使用哪個列或常數與key一起從表中選擇行。

rows

顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。

filtered

顯示了通過條件過濾出的行數的百分比估計值。

extra

該列包含mysql解決查詢的詳細資訊

not exists:mysql能夠對查詢進行left join優化,發現1個匹配left join標準的行後,不再為前面的的行組合在該錶內檢查更多的行。

range checked for each record (index map: #):mysql沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。

using filesort:mysql需要額外的一次傳遞,以找出如何按排序順序檢索行。

using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。

using temporary:為了解決查詢,mysql需要建立乙個臨時表來容納結果。

using where:where 子句用於限制哪乙個行匹配下乙個表或傳送到客戶。

using sort_union(...), using union(...), using intersect(...):這些函式說明如何為index_merge聯接型別合併索引掃瞄。

using index for group-by:類似於訪問表的using index方式,using index for group-by表示mysql發現了乙個索引,可以用來查 詢group by或distinct查詢的所有列,而不要額外搜尋硬碟訪問實際的表。

4.經常增刪改的表建索引,也還是有問題的,解決辦法是刪除索引,重新建立索引!

案例:

select * from ( select a.*, b. name as owneridtypename,db. name as logicdelstatusname from zc_bas_vehicle_owner a left join sys_dict b on a.owneridtype = b. code and b.pname = 'idtype' and b.pid != 0 left join sys_dict db on a.logicdelstatus = db. code and db.pid != 0 and db.pname = 'logicdelstatus') tab where 1=1

and id = #

and ownername = #

and ownerid = #

and weixin = #

and logicdelstatus = #

治超專案資料查詢慢是多方面的:

1.sql本身關聯了多張表

關聯了2次字典表

2.分頁sql:

查詢兩次:

2.1 查詢分頁資料結果集查詢效率還可以

2.2 查詢總記錄數很慢

很慢的原因是查詢了所有資料然後再coun(1)

sql: select count(1) from + ( 上面的sql )+條件

方案1和方案2實際對比:

方案1只適合單錶和字典表關聯查詢,多個表複雜查詢就不好操作了

方案2查詢頁碼比較大的資料時候就很慢了,這個方案1沒有出現

MySql MyBatis 批量更新

最近在公司專案中,遇到了個情景,需要跑批處理大批量的檔案,並把資料庫中原有的狀態更新,之前有遇到過一條一條操作的情況,速度較慢,因此採用批量更新的方式運算元據。插入sql insert into person id,name,phone,address values 1,name1 11111111...

mysql mybatis遇到問題集合

1 錯誤描述 之前沒有遇到這個錯誤,現在是mysql的版本是6.幾的版本,之前用的5的版本沒有出現該問題 解決方案 在連線字串後面加上?servertimezone utc 其中utc是統一標準世界時間。完整的連線字串示例 jdbc mysql localhost 3306 test?servert...

Mysql Mybatis插入資料返回自增主鍵

新增主機裝置管理資訊 param hostpojo 主機裝置管理資訊 return 結果 override transactional public intaddhost hostpojo hostpojo 查詢主機裝置管理列表 param hostpojo 主機裝置管理 return 主機裝置管理...