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

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

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

一、插入數(shù)據(jù)優(yōu)化

(1) insert 語句

① 批量插入數(shù)據(jù)

insert into tb_test values(1, 'Tom'), (2, 'Cat'), (3, 'Jerry');

② 手動(dòng)控制事務(wù)

start transaction;
insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
insert into tb_test values(4,'Tom'),(5,'Cat'),(6,'Jerry');
insert into tb_test values(7,'Tom'),(8,'Cat'),(9,'Jerry');
commit;

③ 主鍵順序插入,性能要高于亂序插入

主鍵亂序插入 : 8 1 9 21 88 2 4 15 89 5 7 3
主鍵順序插入 : 1 2 3 4 5 7 8 9 15 21 88 89【☆】

(2) load 大批量插入數(shù)據(jù)【☆?

① 如果需要一次性插入大批量數(shù)據(jù)(百萬級(jí)別),使用 insert 語句插入性能很低
② 可使用 MySQL 數(shù)據(jù)庫提供的 load 指令進(jìn)行插入

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


可執(zhí)行如下指令,將數(shù)據(jù)腳本文件中的數(shù)據(jù)加載到表結(jié)構(gòu)中:

-- 客戶端連接服務(wù)端時(shí),加上參數(shù) -–local-infile
mysql –-local-infile -u root -p

-- 設(shè)置全局參數(shù)local_infile為1,開啟從本地加載文件導(dǎo)入數(shù)據(jù)的開關(guān)
set global local_infile = 1;

-- 執(zhí)行l(wèi)oad指令將準(zhǔn)備好的數(shù)據(jù),加載到表結(jié)構(gòu)中
load data local infile '/root/sql1.log' into table tb_user fields
terminated by ',' lines terminated by '\n' ;

二、主鍵優(yōu)化

主鍵順序插入的性能是要高于亂序插入的, 為什么?

(1) 數(shù)據(jù)組織形式

  • 在 InnoDB 存儲(chǔ)引擎中,表數(shù)據(jù)都是根據(jù)主鍵順序組織存放的
  • 這種存儲(chǔ)方式的表稱為索引組織表 (index organized table IOT)

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

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

在 InnoDB 存儲(chǔ)引擎中,數(shù)據(jù)行是記錄在邏輯結(jié)構(gòu) page 頁中的,而每一個(gè)頁的大小是固定的,默認(rèn)16K。那也就意味著, 一個(gè)頁中所存儲(chǔ)的行也是有限的,如果插入的數(shù)據(jù)行 row 在該頁存儲(chǔ)不小,將會(huì)存儲(chǔ)到下一個(gè)頁中,頁與頁之間會(huì)通過指針連接。

(2) 頁分裂

  • 頁可以為空,也可以填充一半,也可以填充100%
  • 每個(gè)頁包含了 2-N 行數(shù)據(jù)
  • 如果一行數(shù)據(jù)過大,會(huì)行溢出,根據(jù)主鍵排列

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

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


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

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

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

(3) 頁合并

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

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

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

(4) 主鍵設(shè)計(jì)原則

  • 滿足業(yè)務(wù)需求的情況下,盡量降低主鍵的長度
  • 插入數(shù)據(jù)時(shí),盡量選擇順序插入,選擇使用 AUTO_INCREMENT 自增主鍵
  • 盡量不要使用UUID做主鍵或者是其他自然主鍵,如身份證號(hào)
  • 業(yè)務(wù)操作時(shí),避免對(duì)主鍵的修改

三、orber by 優(yōu)化

  • MySQL的排序,有種方式:
  • Using filesort : 全表掃描,讀取滿足條件的數(shù)據(jù)行,然后在排序緩沖區(qū) sort buffer 中完成排序操作。所有不是通過索引直接返回排序結(jié)果的排序都叫 FileSort 排序。
  • Using index : 通過有序索引順序掃描直接返回有序數(shù)據(jù),這種情況即為 using index,不需要額外排序,操作效率高。
  • Using index 的性能高,而 Using filesort 性能低

  • 根據(jù)排序字段建立合適的索引,多字段排序時(shí),也遵循最左前綴法則。
  • 盡量使用覆蓋索引。
  • 多字段排序, 一個(gè)升序一個(gè)降序,此時(shí)需要注意聯(lián)合索引在創(chuàng)建時(shí)的規(guī)則(ASC/DESC)。
  • 如果不可避免的出現(xiàn)filesort,大數(shù)據(jù)量排序時(shí),可以適當(dāng)增大排序緩沖區(qū)大小 sort_buffer_size(默認(rèn)256k)。

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

四、group by 優(yōu)化

  • 在分組操作時(shí),可以通過索引來提高效率。
  • 分組操作時(shí),索引的使用也是滿足最左前綴法則的

五、limit 優(yōu)化(分頁)

  • 在數(shù)據(jù)量比較大時(shí),如果進(jìn)行l(wèi)imit分頁查詢,在查詢時(shí),越往后,分頁查詢效率越低。

  • 在進(jìn)行分頁查詢時(shí),如果執(zhí)行limit 2000000,10 ,此時(shí)需要MySQL排序前2000010 條記錄,僅僅返回 2000000 - 2000010的記錄,其他記錄丟棄,查詢排序的代價(jià)非常大

優(yōu)化思路: 一般分頁查詢時(shí),通過創(chuàng)建 覆蓋索引 能夠比較好地提高性能,可以通過覆蓋索引加子查詢(多表聯(lián)查)形式進(jìn)行優(yōu)化

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

六、count 優(yōu)化

  • count() 是一個(gè)聚合函數(shù):對(duì)于返回的結(jié)果集,一行行地判斷,如果 count 函數(shù)的參數(shù)不是 NULL,累計(jì)值就加 1,否則不加,最后返回累計(jì)值。

用法:

  • count(*)
  • count(主鍵)
  • count(字段)
  • count(數(shù)字)

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

七、update 優(yōu)化

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

InnoDB 的行鎖是針對(duì)索引加的鎖,不是針對(duì)記錄加的鎖。并且該索引不能失效,否則會(huì)從行鎖升級(jí)為表鎖 文章來源地址http://www.zghlxwxcb.cn/news/detail-477829.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(八):聊聊如何插入數(shù)據(jù)時(shí)比約束更靈活的限制數(shù)據(jù)插入以及怎么一個(gè)insert語句同時(shí)插入多張表

    【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(一):關(guān)于SQL不得不說的那些事 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(二):簡單單表查詢 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(三):SQL排序的那些事 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列(四):從執(zhí)行計(jì)劃討論UNION ALL與空字符串UNION與OR的使用注意事項(xiàng) 【SQL開發(fā)實(shí)戰(zhàn)技巧】系列

    2024年01月15日
    瀏覽(37)
  • 【MySQL數(shù)據(jù)庫】MySQL 高級(jí)SQL 語句一

    【MySQL數(shù)據(jù)庫】MySQL 高級(jí)SQL 語句一

    ) % :百分號(hào)表示零個(gè)、一個(gè)或多個(gè)字符 _ :下劃線表示單個(gè)字符 ‘A_Z’:所有以 ‘A’ 起頭,另一個(gè)任何值的字符,且以 ‘Z’ 為結(jié)尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合這一個(gè)模式,而 ‘AKKZ’ 并不符合 (因?yàn)樵?A 和 Z 之間有兩個(gè)字符,而不是一個(gè)字符)。 ‘ABC%’

    2024年02月09日
    瀏覽(1354)
  • 【數(shù)據(jù)庫】MySQL 高級(jí)(進(jìn)階) SQL 語句

    【數(shù)據(jù)庫】MySQL 高級(jí)(進(jìn)階) SQL 語句

    location表格創(chuàng)建 store_info表格創(chuàng)建 顯示表格中一個(gè)或數(shù)個(gè)字段的所有數(shù)據(jù)記錄 不顯示重復(fù)的數(shù)據(jù)記錄 按照條件進(jìn)行查詢 在已知的字段數(shù)據(jù)取值范圍內(nèi)取值 另外還有not in命令,用法一致,表示顯示不在指定范圍內(nèi)的字段的值。 在兩個(gè)字段數(shù)據(jù)值之間取值,包含兩邊字段的數(shù)據(jù)

    2024年02月09日
    瀏覽(30)
  • 【MySQL】數(shù)據(jù)庫SQL語句之DML

    【MySQL】數(shù)據(jù)庫SQL語句之DML

    目錄 前言: 一.DML添加數(shù)據(jù) 1.1給指定字段添加數(shù)據(jù) 1.2給全部字段添加數(shù)據(jù) 1.3批量添加數(shù)據(jù) 二.DML修改數(shù)據(jù) 三.DML刪除數(shù)據(jù) 四.結(jié)尾 ? 時(shí)隔一周,啊蘇今天來更新啦,簡單說說這周在做些什么吧,上課、看書、放松等,哈哈哈,所以博客就這樣被擱了。 ? 今天感覺不錯(cuò),給大

    2024年02月08日
    瀏覽(95)
  • MySQL 數(shù)據(jù)庫 group by 語句怎么優(yōu)化?

    MySQL 數(shù)據(jù)庫 group by 語句怎么優(yōu)化?

    我這里創(chuàng)建一張訂單表 復(fù)制代碼 同時(shí)也在表里插了一些數(shù)據(jù) 現(xiàn)在我們這里執(zhí)行 group by 語句 復(fù)制代碼 很明顯,這里就可以統(tǒng)計(jì)出來 每件商品一共有多少訂單數(shù)據(jù)! 2.1、explain 分析 不同的數(shù)據(jù)庫版本,用 explain 執(zhí)行的結(jié)果并不一致,同樣是上面 sql 語句 「MySQL 5.7 版本」 Extr

    2024年02月06日
    瀏覽(17)
  • MySQL相關(guān)的SQL語句、數(shù)據(jù)庫、數(shù)據(jù)表、字段、類型

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

    2024年02月13日
    瀏覽(116)
  • MySQL數(shù)據(jù)庫中的索引(含SQL語句)

    MySQL數(shù)據(jù)庫中的索引(含SQL語句)

    假設(shè)有一張表,表中有100萬條數(shù)據(jù),這100萬條數(shù)據(jù)在硬盤上是存儲(chǔ)在數(shù)據(jù)頁上的,一頁數(shù)據(jù)大小為16k。存儲(chǔ)100萬條數(shù)據(jù)那么就需要數(shù)據(jù)頁,假設(shè)其中有一條數(shù)據(jù)是“id為7900”的,那么如果要查詢這條數(shù)據(jù),其中SQL是SELECT * FROM 表名 WHERE id = 7900。在執(zhí)行這條SQL語句的時(shí)候,MyS

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

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

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

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

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

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

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

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

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

    2024年02月08日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包