国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化

這篇具有很好參考價(jià)值的文章主要介紹了[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??鍵盤敲爛,年薪30萬(wàn)??

目錄

一、索引優(yōu)化 回顧:

??索引分類:

??索引失效:

??設(shè)計(jì)原則:

??SQL性能分析

二、SQL優(yōu)化 語(yǔ)句優(yōu)化

?? insert語(yǔ)句:

?? 主鍵優(yōu)化:

?? order by優(yōu)化:

?? group by優(yōu)化:

?? limit 優(yōu)化

?? count 優(yōu)化

?? update 優(yōu)化?


一、索引優(yōu)化 回顧:

??索引分類:
  • 一般分類:主鍵索引、唯一索引、常規(guī)索引、全文索引
  • 按存儲(chǔ)分類:聚集索引、二級(jí)索引

注意:

主鍵索引只能有一個(gè)且必須有一個(gè),二級(jí)索引可以有多個(gè),如果沒(méi)有主鍵,選唯一索引作為主鍵索引,如果沒(méi)有唯一索引,那么mysql會(huì)創(chuàng)建一個(gè)隱藏字段rowid作為索引。

?

??索引失效:
  • 不滿足最左前綴法則
  • 索引列計(jì)算
  • 字符串類型不加'' 導(dǎo)致類型轉(zhuǎn)化
  • 使用or連接了非索引的列
  • %在最左邊,>或<號(hào)
  • 數(shù)據(jù)分布影響
??設(shè)計(jì)原則:

? ? 盡量建立聯(lián)合索引,針對(duì)于數(shù)據(jù)量大(超百萬(wàn)),查詢多的表建索引,針對(duì)于where order by group by后的字段創(chuàng)建索引,如果字段很長(zhǎng),考慮前綴索引,如果索引列不能為NULL,須在數(shù)據(jù)庫(kù)字段加上not null約束,這樣優(yōu)化器可以更好的選擇更有效的索引。

??SQL性能分析
  1. 執(zhí)行頻次
  2. 慢查詢?nèi)罩?/li>
  3. profile
  4. expplain執(zhí)行計(jì)劃?

二、SQL優(yōu)化 語(yǔ)句優(yōu)化

?? insert語(yǔ)句:

批量插入優(yōu)化:

  • 一次性插入多條數(shù)據(jù),但是不建議超過(guò)1000條。
insert into user values(1, 'zhangsan'), (2,'lisi');

手動(dòng)提交事務(wù)優(yōu)化:

  • 超過(guò)1000條,手動(dòng)開(kāi)啟提交事務(wù),減少與數(shù)據(jù)庫(kù)的交互。
start transaction

insert into user values(1, 'zhagnsan'), (2, 'lisi'), ……
insert into user values(1000, 'wangwu'), (1001, 'zhaoliu') ……
……

commit

主鍵順序插入優(yōu)化:

[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化,mysql,mysql,sql,數(shù)據(jù)庫(kù)

大批量插入數(shù)據(jù)優(yōu)化:

  • load:插入百萬(wàn)數(shù)據(jù)到數(shù)據(jù)庫(kù)

[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化,mysql,mysql,sql,數(shù)據(jù)庫(kù)

  • load使用三步走:

1.連接數(shù)據(jù)庫(kù)時(shí)加上:

--local-infile

2.打開(kāi)全局參數(shù):

set global local infile = 1;

3.插入數(shù)據(jù)的腳本:

load data local infile '/root/sql1.log' into table 'tb_user' fields terminated by ',' line terminated by '\n';
?? 主鍵優(yōu)化:

前面提到了主鍵按順序插入可提高性能,這里講解原理。

(這里我不是很明白,摘自GPT的回答)

頁(yè)分裂:

  • 當(dāng)在一個(gè)已滿的頁(yè)(節(jié)點(diǎn))中插入一個(gè)新的鍵時(shí),可能會(huì)導(dǎo)致該頁(yè)不足以容納新鍵,因此需要進(jìn)行頁(yè)分裂。
  • 頁(yè)分裂的過(guò)程涉及將原有的頁(yè)分成兩半,并將其中一半的部分移動(dòng)到一個(gè)新的頁(yè)中。這樣就在原有頁(yè)和新頁(yè)之間創(chuàng)建了一個(gè)新的分隔鍵,用于指示兩個(gè)頁(yè)之間的分割。
  • 頁(yè)分裂的目的是確保樹(shù)的平衡,并維護(hù)索引的有序性。它通常發(fā)生在B樹(shù)或B+樹(shù)中。

頁(yè)合并:

  • 與頁(yè)分裂相反,頁(yè)合并發(fā)生在刪除操作后。當(dāng)一個(gè)頁(yè)的鍵減少到一個(gè)臨界點(diǎn)以下時(shí),可以考慮將其與相鄰的頁(yè)合并,從而減少索引樹(shù)的高度。
  • 頁(yè)合并的過(guò)程涉及將兩個(gè)相鄰的頁(yè)合并成一個(gè),并且刪除在合并過(guò)程中用于分隔的鍵。這有助于保持樹(shù)的平衡,并且減少了樹(shù)的高度,提高了檢索效率。
  • 頁(yè)合并通常也發(fā)生在B樹(shù)或B+樹(shù)這樣的平衡樹(shù)結(jié)構(gòu)中。

小結(jié):

? ? 索引的設(shè)計(jì)原則:長(zhǎng)度盡量短,盡量有序插入。


?? order by優(yōu)化:

優(yōu)化準(zhǔn)則:

  • 如果創(chuàng)建索引的排序規(guī)則和要查詢語(yǔ)句的排序規(guī)則相同,那么直接返回?cái)?shù)據(jù),效率高,如果不同,需要在緩沖區(qū)對(duì)相應(yīng)的字段進(jìn)行排序,效率不高。

注意:

創(chuàng)建索引默認(rèn)是升序排序,asc

創(chuàng)建索引是指定排序規(guī)則

create index id_na_ty on tb_book(name asc, type asc);

例如:

一張tb_book表的索引[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化,mysql,mysql,sql,數(shù)據(jù)庫(kù)

  • 執(zhí)行語(yǔ)句1(升序排序查詢):
select id, name, type from tb_book order by name asc, type asc;

-- 直接返回索引下面掛的數(shù)據(jù),效率高

查看執(zhí)行過(guò)程:

[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化,mysql,mysql,sql,數(shù)據(jù)庫(kù)

  • ?執(zhí)行語(yǔ)句2(name 升序 type 降序)
select id, name, type from tb_book order by name asc, type desc;

-- 會(huì)在緩沖區(qū)進(jìn)行排序,效率不高。

查看執(zhí)行過(guò)程:

[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化,mysql,mysql,sql,數(shù)據(jù)庫(kù)

小總結(jié):

order by 查詢的字段要與建立索引時(shí)字段的排序規(guī)則相同,若不同,會(huì)在緩沖區(qū)排序然后返回?cái)?shù)據(jù),可以在創(chuàng)建索引時(shí)指定排序規(guī)則

?? group by優(yōu)化:

跟order by類似,建立好相應(yīng)的索引,并且保證索引正確的使用規(guī)則,比如最左前綴法則。

?? limit 優(yōu)化

記?。?/span>覆蓋索引加子查詢:

原理:原本要對(duì)數(shù)據(jù)進(jìn)行排序,在挑選50條數(shù)據(jù),現(xiàn)在使用索引覆蓋 + 子查詢 先根據(jù)id排序,排完之后直接子查詢就可以啦。

select * from user where limit 10000, 50;
-- 回表查詢性能低
select t.* from user t, (select if from user where order by id limit 10000, 50) s where t.id = s.id;
-- 覆蓋索引 + 子查詢 性能略好
?? count 優(yōu)化

count統(tǒng)計(jì)非空字段數(shù)量,count無(wú)法優(yōu)化,但是我們要區(qū)分count()括號(hào)里的字段的含義

  1. count(*):不取值,直接累加。
  2. count(主鍵):取出主鍵id,累加
  3. count(某個(gè)字段:有非空約束):取值,返回給服務(wù)層,服務(wù)層直接累加
  4. coutn(某個(gè)字段:無(wú)非空約束):取值,返回給服務(wù)層,服務(wù)層判斷后累加。
  5. count(1):每行放一個(gè)1 并且累加,只要不是null都可以累加

小結(jié):

盡量使用count(*)

?? update 優(yōu)化?
  • 更新的條件一定要有索引,否則行鎖會(huì)標(biāo)為表鎖。

例如:user表 name字段帶有索引

一個(gè)客戶端執(zhí)行:update user set name = 'Zhangsan' where name = 'Lisi';

一個(gè)客戶端執(zhí)行:update user set name = 'wangwu' where name = 'zhaoliu';

分析:

此時(shí)可以并發(fā)執(zhí)行,因?yàn)樗饕龑?duì)應(yīng)的是行級(jí)鎖,不會(huì)鎖整張表,相反如果沒(méi)有索引,或者索引失效,行級(jí)鎖就會(huì)變?yōu)楸礞i,無(wú)法高并發(fā)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764856.html

到了這里,關(guān)于[MySQL]SQL優(yōu)化之sql語(yǔ)句優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL相關(guān)的SQL語(yǔ)句、數(shù)據(jù)庫(kù)、數(shù)據(jù)表、字段、類型

    1、 SQL 語(yǔ)句不區(qū)分大小寫。 SQL語(yǔ)句 用途 描述 mysql -u root -p 連接 MySQL 在命令行窗口中輸入 mysql -u root -p 命令,回車,然后輸入 MySQL 密碼(不要忘記了密碼,找回麻煩),再回車就連接上 MySQL 了。最初都是使用 root 用戶登錄,工作中不能一直使用 root 用戶登錄。因?yàn)?root 權(quán)限太

    2024年02月13日
    瀏覽(115)
  • mysql,用sql語(yǔ)句,建立學(xué)生-課程數(shù)據(jù)庫(kù)基本表

    mysql,用sql語(yǔ)句,建立學(xué)生-課程數(shù)據(jù)庫(kù)基本表

    學(xué)生表 學(xué)號(hào) 姓名 年齡 性別 院系 Student Sno Sname Sage Ssex Sdept 課程表 課程號(hào) 課程名 先行課 學(xué)分 Course Cno Cname Cpno Ccredit 選課表 學(xué)號(hào) 課程號(hào) 成績(jī) SC Sno Cno Grade 注意創(chuàng)建表的時(shí)候要注意它的字段名,類型,長(zhǎng)度,約束條件,取值范圍要合適,大小寫符號(hào)要正確,中文逗號(hào),分號(hào)

    2024年02月08日
    瀏覽(27)
  • MySQL數(shù)據(jù)庫(kù)概念、管理以及SQL語(yǔ)句的基本命令操作

    MySQL數(shù)據(jù)庫(kù)概念、管理以及SQL語(yǔ)句的基本命令操作

    數(shù)據(jù)(data) 描述事物的符號(hào)記錄 包括數(shù)字,文字、圖形、圖像、聲音、檔案記錄等 以“記錄”形式按統(tǒng)一格式進(jìn)行存儲(chǔ)(記錄可以看成一條記錄) 表 將不同的記錄組織在一起 用來(lái)存儲(chǔ)具體數(shù)據(jù) 記錄:行 字段(屬性):列 以行+列的形式就組成了表(數(shù)據(jù)存儲(chǔ)在表中) 數(shù)

    2024年02月08日
    瀏覽(33)
  • 【MySQL 數(shù)據(jù)庫(kù)】7、SQL 優(yōu)化

    【MySQL 數(shù)據(jù)庫(kù)】7、SQL 優(yōu)化

    ① 批量插入數(shù)據(jù) ② 手動(dòng)控制事務(wù) ③ 主鍵順序插入,性能要高于亂序插入 主鍵亂序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 主鍵順序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 【☆】 】 ① 如果需要一次性插入大批量數(shù)據(jù)(百萬(wàn)級(jí)別),使用 insert 語(yǔ)句插入性能 很低 ② 可使用 MySQL 數(shù)據(jù)庫(kù)提供的 loa

    2024年02月08日
    瀏覽(33)
  • MySQL數(shù)據(jù)庫(kù)第十一課---------SQl語(yǔ)句的拔高-------水平提升

    MySQL數(shù)據(jù)庫(kù)第十一課---------SQl語(yǔ)句的拔高-------水平提升

    ???????????????????????????????? ? ? ? ? ????? ????個(gè)人主頁(yè) ::小小頁(yè)面 ????????????????? gitee頁(yè)面 :秦大大 ? ? ? ? ? ? ? ? 一個(gè)愛(ài)分享的小博主 ?歡迎小可愛(ài)們前來(lái)借鑒 ______________________________________________________? ? SQL提高 ? 日期函數(shù) ????

    2024年02月16日
    瀏覽(41)
  • MySQL 數(shù)據(jù)庫(kù)實(shí)用指南:測(cè)試數(shù)據(jù)準(zhǔn)備、SQL語(yǔ)句規(guī)范與基本操作

    MySQL 數(shù)據(jù)庫(kù)實(shí)用指南:測(cè)試數(shù)據(jù)準(zhǔn)備、SQL語(yǔ)句規(guī)范與基本操作

    歡迎來(lái)到小K的MySQL專欄,本節(jié)將為大家準(zhǔn)備MySQL測(cè)試數(shù)據(jù)、以及帶來(lái)SQL語(yǔ)句規(guī)范、數(shù)據(jù)庫(kù)的基本操作的詳細(xì)講解 要學(xué)習(xí)SQL查詢語(yǔ)句,首先必須解決一個(gè)問(wèn)題,數(shù)據(jù)問(wèn)題。為了方便大家學(xué)習(xí)閱讀我的文章,在這里提供了一個(gè)test.sql文件 ? 登錄MySQL,輸入 source xxx/test.sql 導(dǎo)入sql文

    2024年02月08日
    瀏覽(33)
  • MySQL數(shù)據(jù)庫(kù)增刪改查及聚合查詢SQL語(yǔ)句學(xué)習(xí)匯總

    MySQL數(shù)據(jù)庫(kù)增刪改查及聚合查詢SQL語(yǔ)句學(xué)習(xí)匯總

    目錄 數(shù)據(jù)庫(kù)增刪改查SQL語(yǔ)句 MySQL數(shù)據(jù)庫(kù)指令 1.查詢數(shù)據(jù)庫(kù) 2.創(chuàng)建數(shù)據(jù)庫(kù) 3.刪除數(shù)據(jù)庫(kù) 4.選擇數(shù)據(jù)庫(kù) 創(chuàng)建表table ? 查看所有表 創(chuàng)建表 查看指定表的結(jié)構(gòu) 刪除表 數(shù)據(jù)庫(kù)命令進(jìn)行注釋 增刪改查(CRUD)詳細(xì)說(shuō)明 增加 SQL庫(kù)提供了關(guān)于時(shí)間的函數(shù):now()? 查詢 查詢表作列與列之間進(jìn)

    2024年02月09日
    瀏覽(29)
  • 基于Linux操作系統(tǒng)中的MySQL數(shù)據(jù)庫(kù)SQL語(yǔ)句(三十一)

    基于Linux操作系統(tǒng)中的MySQL數(shù)據(jù)庫(kù)SQL語(yǔ)句(三十一)

    MySQL數(shù)據(jù)庫(kù)SQL語(yǔ)句 目錄 一、SQL語(yǔ)句類型 1、DDL 2、DML 3、DCL 4、DQL 二、數(shù)據(jù)庫(kù)操作 1、查看 2、創(chuàng)建 2.1、默認(rèn)字符集 2.2、指定字符集 3、進(jìn)入 ?4、刪除 5、更改 6、練習(xí) 三、數(shù)據(jù)表操作 (一)數(shù)據(jù)類型 1、數(shù)值類型 1.1、TINYINT 1.2、SMALLINT 1.3、INT 1.4、BIGINT 1.5、FLOAT(M,D) 2、時(shí)間

    2024年02月15日
    瀏覽(25)
  • MySQL:想實(shí)現(xiàn)sql語(yǔ)句進(jìn)行批量刪除數(shù)據(jù)庫(kù)或表,而引發(fā)的熬夜探究

    MySQL:想實(shí)現(xiàn)sql語(yǔ)句進(jìn)行批量刪除數(shù)據(jù)庫(kù)或表,而引發(fā)的熬夜探究

    因?yàn)樵谧詼y(cè)過(guò)程中,創(chuàng)建了很多數(shù)據(jù)庫(kù),一個(gè)個(gè)手動(dòng)刪除屬實(shí)有點(diǎn)對(duì)不起程序員這個(gè)身份,那么有沒(méi)有簡(jiǎn)單的sql語(yǔ)句操作來(lái)進(jìn)行批量刪除數(shù)據(jù)庫(kù)呢?于是便有了本篇文章 上面圖片是AI創(chuàng)作,未經(jīng)允許,不可商用哦! 刪庫(kù)跑路需謹(jǐn)慎, 放棄一切亦不易。 了解到數(shù)據(jù)庫(kù)或表的信

    2024年01月16日
    瀏覽(31)
  • 玩轉(zhuǎn)MySQL數(shù)據(jù)庫(kù)之SQL優(yōu)化之慢查詢

    本系列為:MySQL數(shù)據(jù)庫(kù)詳解,為千鋒資深教學(xué)老師獨(dú)家創(chuàng)作,致力于為大家講解清晰MySQL數(shù)據(jù)庫(kù)相關(guān)知識(shí)點(diǎn),含有豐富的代碼案例及講解。如果感覺(jué)對(duì)大家有幫助的話,可以【關(guān)注】持續(xù)追更~ 文末有本文重點(diǎn)總結(jié),技術(shù)類問(wèn)題,也歡迎大家和我們溝通交流! 從今天開(kāi)始本系列

    2024年02月06日
    瀏覽(98)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包