亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL筆記之?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化方式

 更新時(shí)間:2024年01月24日 09:52:58   作者:Little.M_  
這篇文章主要介紹了SQL筆記之?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SQL筆記之?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化

1. 拆分表(冷熱數(shù)據(jù)分離)

不常用的數(shù)據(jù)為冷數(shù)據(jù),反之則為熱數(shù)據(jù)。

如果一個(gè)表中的數(shù)據(jù)存在明顯的使用頻率差異,那么可以將冷熱數(shù)據(jù)分離。

通過(guò)這種分解可以提高表的查詢效率。

對(duì)于字段很多且有些字段使用不頻繁的表,可以通過(guò)這種分解的方式來(lái)優(yōu)化數(shù)據(jù)庫(kù)的性能。

例如:

會(huì)員members表存儲(chǔ)會(huì)員登錄認(rèn)證信息,該表中有很多字段,如id、姓名、密碼、地址、電 話、個(gè)人描述字段。

其中地址、電話、個(gè)人描述等字段并不常用,可以將這些不常用的字段分解出另一 個(gè)表。

2. 增加中間表

假如當(dāng)前有兩個(gè)表,學(xué)生信息表包含id、學(xué)號(hào)、姓名、年齡和班號(hào),班級(jí)表包含id、班級(jí)名、地址、班長(zhǎng)。

若現(xiàn)在有一個(gè)模塊需要經(jīng)常查詢帶有學(xué)生名稱(name)、學(xué)生所在班級(jí)名稱(className)、學(xué)生班級(jí)班 長(zhǎng)(monitor)的學(xué)生信息。

根據(jù)這種情況可以創(chuàng)建一個(gè) temp_student 表。temp_student表中存儲(chǔ)學(xué)生名稱(stu_name)、學(xué)生所在班級(jí)名稱(className)和學(xué)生班級(jí)班長(zhǎng)(monitor)信息。

以后,可以直接從temp_student表中查詢學(xué)生名稱、班級(jí)名稱和班級(jí)班長(zhǎng),而不用每次都進(jìn)行聯(lián)合查 詢。這樣可以提高數(shù)據(jù)庫(kù)的查詢速度。

3. 增加冗余字段

設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí)應(yīng)盡量遵循范式理論的規(guī)約,盡可能減少冗余字段,讓數(shù)據(jù)庫(kù)設(shè)計(jì)看起來(lái)精致、優(yōu)雅。 但是,合理地加入冗余字段可以提高查詢速度。

表的規(guī)范化程度越高,表與表之間的關(guān)系就越多,需要連接查詢的情況也就越多。

尤其在數(shù)據(jù)量大,而 且需要頻繁進(jìn)行連接的時(shí)候,為了提升效率,我們也可以考慮增加冗余字段來(lái)減少連接。

4. 優(yōu)化數(shù)據(jù)類型

(1)對(duì)整數(shù)類型數(shù)據(jù)進(jìn)行優(yōu)化。

遇到整數(shù)類型的字段可以用 INT 型 。這樣做的理由是,INT 型數(shù)據(jù)有足夠大的取值范圍,不用擔(dān)心數(shù) 據(jù)超出取值范圍的問(wèn)題。

剛開(kāi)始做項(xiàng)目的時(shí)候,首先要保證系統(tǒng)的穩(wěn)定性,這樣設(shè)計(jì)字段類型是可以 的。

但在數(shù)據(jù)量很大的時(shí)候,數(shù)據(jù)類型的定義,在很大程度上會(huì)影響到系統(tǒng)整體的執(zhí)行效率。

對(duì)于 非負(fù)型 的數(shù)據(jù)(如自增ID、整型IP)來(lái)說(shuō),要優(yōu)先使用無(wú)符號(hào)整型 UNSIGNED 來(lái)存儲(chǔ)。

因?yàn)闊o(wú)符號(hào) 相對(duì)于有符號(hào),同樣的字節(jié)數(shù),存儲(chǔ)的數(shù)值范圍更大。

如tinyint有符號(hào)為-128-127,無(wú)符號(hào)為0-255,多出一倍的存儲(chǔ)空間。

(2)既可以使用文本類型也可以使用整數(shù)類型的字段,要選擇使用整數(shù)類型。

跟文本類型數(shù)據(jù)相比,大整數(shù)往往占用更少的存儲(chǔ)空間 ,因此,在存取和比對(duì)的時(shí)候,可以占用更少的 內(nèi)存空間。

所以,在二者皆可用的情況下,盡量使用整數(shù)類型,這樣可以提高查詢的效率。

如:將IP地 址轉(zhuǎn)換成整型數(shù)據(jù)。

(3)避免使用TEXT、BLOB數(shù)據(jù)類型

(4)避免使用ENUM類型

修改ENUM值需要使用ALTER語(yǔ)句。

ENUM類型的ORDER BY 操作效率低,需要額外操作。使用TINYINT來(lái)代替ENUM類型。

(5)使用TIMESTAMP存儲(chǔ)時(shí)間

TIMESTAMP存儲(chǔ)的時(shí)間范圍1970-01-01 00:00:01 ~ 2038-01_19-03:14:07。

TIMESTAMP使用4字節(jié),DATETIME使用8個(gè)字節(jié),同時(shí)TIMESTAMP具有自動(dòng)賦值以及自動(dòng)更新的特性。

(6)用DECIMAL代替FLOAT和DOUBLE存儲(chǔ)精確浮點(diǎn)數(shù)

  • 非精準(zhǔn)浮點(diǎn): float, double
  • 精準(zhǔn)浮點(diǎn):decimal

Decimal類型為精準(zhǔn)浮點(diǎn)數(shù),在計(jì)算時(shí)不會(huì)丟失精度,尤其是財(cái)務(wù)相關(guān)的金融類數(shù)據(jù)。

占用空間由定義的寬度決定,每4個(gè)字節(jié)可以存儲(chǔ)9位數(shù)字,并且小數(shù)點(diǎn)要占用一個(gè)字節(jié)。

可用于存儲(chǔ)比bigint更大的整型數(shù)據(jù)。

總之,遇到數(shù)據(jù)量大的項(xiàng)目時(shí),一定要在充分了解業(yè)務(wù)需求的前提下,合理優(yōu)化數(shù)據(jù)類型,這樣才能充 分發(fā)揮資源的效率,使系統(tǒng)達(dá)到最優(yōu)。

5. 優(yōu)化插入記錄的速度

插入記錄時(shí),影響插入速度的主要是索引、唯一性校驗(yàn)、一次插入記錄條數(shù)等。根據(jù)這些情況可以分別進(jìn)行優(yōu)化。

(1)MyISAM引擎的表:

  • ① 禁用索引
  • ② 禁用唯一性檢查
  • ③ 使用批量插入

插入多條記錄時(shí),可以使用一條INSERT語(yǔ)句插入一條數(shù)據(jù),也可以使用一條INSERT語(yǔ)句插入多條數(shù)據(jù)。

插入一條記錄的INSERT語(yǔ)句情形如下:

insert into student values(1,'zhangsan',18,1);
insert into student values(2,'lisi',17,1);
insert into student values(3,'wangwu',17,1);
insert into student values(4,'zhaoliu',19,1);

使用一條INSERT語(yǔ)句插入多條記錄的情形如下:

insert into student values
(1,'zhangsan',18,1),
(2,'lisi',17,1),
(3,'wangwu',17,1),
(4,'zhaoliu',19,1);

第2種情形的插入速度要比第1種情形快。

  • ④ 使用LOAD DATA INFILE 批量導(dǎo)入

當(dāng)需要批量導(dǎo)入數(shù)據(jù)時(shí),如果能用LOAD DATA INFILE語(yǔ)句,就盡量使用。

因?yàn)長(zhǎng)OAD DATA INFILE語(yǔ)句導(dǎo)入數(shù)據(jù)的速度比INSERT語(yǔ)句塊。

(2) InnoDB引擎的表:

  • ① 禁用唯一性檢查

插入數(shù)據(jù)之前執(zhí)行set unique_checks=0來(lái)禁止對(duì)唯一索引的檢查,數(shù)據(jù)導(dǎo)入完成之后再運(yùn)行set unique_check=1。

這個(gè)和MyISAM引擎的使用方法一樣。

  • ② 禁用外鍵檢查
  • ③ 禁止自動(dòng)提交

6. 使用非空約束

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql存儲(chǔ)過(guò)程多層游標(biāo)循環(huán)嵌套的寫法分享

    mysql存儲(chǔ)過(guò)程多層游標(biāo)循環(huán)嵌套的寫法分享

    這篇文章主要介紹了mysql存儲(chǔ)過(guò)程多層游標(biāo)循環(huán)嵌套的寫法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MySQL中EXPLAIN的/基本使用及字段詳解

    MySQL中EXPLAIN的/基本使用及字段詳解

    EXPLAIN命令是MySQL中用于解析SQL查詢語(yǔ)句的工具,幫助開(kāi)發(fā)者理解MySQL如何執(zhí)行SQL語(yǔ)句,通過(guò)EXPLAIN可以查看SQL執(zhí)行的詳細(xì)信息,如表的讀取順序、使用的索引、數(shù)據(jù)讀取操作的類型等,這篇文章主要介紹了MySQL中EXPLAIN的/基本使用及字段詳解,需要的朋友可以參考下
    2024-09-09
  • 一文搞懂什么是MySQL前綴索引

    一文搞懂什么是MySQL前綴索引

    所謂前綴索引,說(shuō)白了就是對(duì)文本的前幾個(gè)字符建立索引,有點(diǎn)類似于?Oracle?中對(duì)字段使用?Left?函數(shù)來(lái)建立函數(shù)索引,只不過(guò)?MySQL?的這個(gè)前綴索引在查詢時(shí)是內(nèi)部自動(dòng)完成匹配的。本文將通過(guò)示例詳細(xì)聊聊前綴索引,需要的可以參考一下
    2022-09-09
  • MYSQL數(shù)據(jù)庫(kù)使用UTF-8中文編碼亂碼的解決辦法

    MYSQL數(shù)據(jù)庫(kù)使用UTF-8中文編碼亂碼的解決辦法

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)使用UTF-8中文編碼亂碼的解決辦法,需要的朋友可以參考下
    2015-10-10
  • MySql中的IFNULL、NULLIF和ISNULL用法詳解

    MySql中的IFNULL、NULLIF和ISNULL用法詳解

    本文主要介紹了MySql中的IFNULL、NULLIF和ISNULL用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 如何提高M(jìn)ySQL Limit查詢性能的方法詳解

    如何提高M(jìn)ySQL Limit查詢性能的方法詳解

    今天小編就為大家分享一篇關(guān)于如何提高M(jìn)ySQL Limit查詢性能的方法詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • mysql 定時(shí)任務(wù)的實(shí)現(xiàn)與使用方法示例

    mysql 定時(shí)任務(wù)的實(shí)現(xiàn)與使用方法示例

    這篇文章主要介紹了mysql 定時(shí)任務(wù)的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了MySQL定時(shí)任務(wù)的相關(guān)原理、創(chuàng)建及使用方法,需要的朋友可以參考下
    2019-11-11
  • MySQL復(fù)合查詢和內(nèi)外連接的操作代碼

    MySQL復(fù)合查詢和內(nèi)外連接的操作代碼

    實(shí)際開(kāi)發(fā)中往往數(shù)據(jù)來(lái)自不同的表,所以需要多表查詢,但是可以將多張表做笛卡爾積后的表當(dāng)做是一張表,也就是單表查詢,這篇文章主要介紹了MySQL復(fù)合查詢和內(nèi)外連接,需要的朋友可以參考下
    2022-09-09
  • mysql的日期和時(shí)間函數(shù)

    mysql的日期和時(shí)間函數(shù)

    mysql的日期和時(shí)間函數(shù) 這里是一個(gè)使用日期函數(shù)的例子。
    2010-11-11
  • mysql CPU高負(fù)載問(wèn)題排查

    mysql CPU高負(fù)載問(wèn)題排查

    這篇文章主要介紹了mysql CPU高負(fù)載問(wèn)題排查的相關(guān)資料,幫助大家更好的理解和使用MySQL,維護(hù)數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論