欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    占用 4 字節(jié)和 INT 相同,但比 INT 可讀性高

    超出 取值范圍的使用 類型存儲

    經(jīng)常會有人用字符串存儲日期型的數(shù)據(jù)(不正確的做法)

    ?缺點 1:無法用日期函數(shù)進行計算和比較?缺點 2:用字符串存儲日期要占用更多的空間

    6. 同財務(wù)相關(guān)的金額類數(shù)據(jù)必須使用 類型

    ?非精準浮點:float,?精準浮點:

    類型為精準浮點數(shù),在計算時不會丟失精度

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

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

    索引設(shè)計規(guī)范1. 限制每張表上的索引數(shù)量,建議單張表索引不超過 5 個

    索引并不是越多越好!索引可以提高效率同樣可以降低效率。

    索引可以增加查詢效率,但同樣也會降低插入和更新的效率,甚至有些情況下會降低查詢效率。

    因為 MySQL 優(yōu)化器在選擇如何優(yōu)化查詢時,會根據(jù)統(tǒng)一信息,對每一個可以用到的索引來進行評估,以生成出一個最好的執(zhí)行計劃,如果同時有很多個索引都可以用于查詢sql中時間戳轉(zhuǎn)換日期格式,就會增加 MySQL 優(yōu)化器生成執(zhí)行計劃的時間,同樣會降低查詢性能。

    2. 禁止給表中的每一列都建立單獨的索引

    5.6 版本之前,一個 sql 只能使用到一個表中的一個索引,5.6 以后,雖然有了合并索引的優(yōu)化方式,但是還是遠遠沒有使用一個聯(lián)合索引的查詢方式好。

    3. 每個 表必須有個主鍵

    是一種索引組織表:數(shù)據(jù)的存儲的邏輯順序和索引的順序是相同的。每個表都可以有多個索引,但是表的存儲順序只能有一種。

    是按照主鍵索引的順序來組織表的

    ?不要使用更新頻繁的列作為主鍵,不適用多列主鍵(相當于聯(lián)合索引)?不要使用 UUID,MD5,HASH,字符串列作為主鍵(無法保證數(shù)據(jù)的順序增長)?主鍵建議使用自增 ID 值

    4. 常見索引列建議

    ?出現(xiàn)在 、、 語句的 WHERE 從句中的列?包含在 ORDER BY、GROUP BY、 中的字段?并不要將符合 1 和 2 中的字段的列都建立一個索引, 通常將 1、2 中的字段建立聯(lián)合索引效果更好?多表 join 的關(guān)聯(lián)列

    5.如何選擇索引列的順序

    建立索引的目的是:希望通過索引進行數(shù)據(jù)查找,減少隨機 IO,增加查詢性能 ,索引能過濾出越少的數(shù)據(jù),則從磁盤中讀入的數(shù)據(jù)也就越少。

    ?區(qū)分度最高的放在聯(lián)合索引的最左側(cè)(區(qū)分度=列中不同值的數(shù)量/列的總行數(shù))?盡量把字段長度小的列放在聯(lián)合索引的最左側(cè)(因為字段長度越小,一頁能存儲的數(shù)據(jù)量越大,IO 性能也就越好)?使用最頻繁的列放到聯(lián)合索引的左側(cè)(這樣可以比較少的建立一些索引)

    6. 避免建立冗余索引和重復(fù)索引(增加了查詢優(yōu)化器生成執(zhí)行計劃的時間)

    ?重復(fù)索引示例: key(id)、index(id)、 index(id)?冗余索引示例:index(a,b,c)、index(a,b)、index(a)

    7. 對于頻繁的查詢優(yōu)先考慮使用覆蓋索引

    覆蓋索引:就是包含了所有查詢字段 (where,, by,group by 包含的字段) 的索引

    覆蓋索引的好處:

    ?避免 表進行索引的二次查詢: 是以聚集索引的順序來存儲的,對于 來說,二級索引在葉子節(jié)點中所保存的是行的主鍵信息,如果是用二級索引查詢數(shù)據(jù)的話,在查找到相應(yīng)的鍵值后,還要通過主鍵進行二次查詢才能獲取我們真實所需要的數(shù)據(jù)。而在覆蓋索引中,二級索引的鍵值中可以獲取所有的數(shù)據(jù),避免了對主鍵的二次查詢 ,減少了 IO 操作,提升了查詢效率。?可以把隨機 IO 變成順序 IO 加快查詢效率:由于覆蓋索引是按鍵值的順序存儲的,對于 IO 密集型的范圍查找來說,對比隨機從磁盤讀取每一行的數(shù)據(jù) IO 要少的多,因此利用覆蓋索引在訪問時也可以把磁盤的隨機讀取的 IO 轉(zhuǎn)變成索引查找的順序 IO。

    8.索引 SET 規(guī)范

    盡量避免使用外鍵約束

    ?不建議使用外鍵約束( key),但一定要在表與表之間的關(guān)聯(lián)鍵上建立索引?外鍵可用于保證數(shù)據(jù)的參照完整性,但建議在業(yè)務(wù)端實現(xiàn)?外鍵會影響父表和子表的寫操作從而降低性能

    數(shù)據(jù)庫 SQL 開發(fā)規(guī)范1. 建議使用預(yù)編譯語句進行數(shù)據(jù)庫操作

    預(yù)編譯語句可以重復(fù)使用這些計劃,減少 SQL 編譯所需要的時間,還可以解決動態(tài) SQL 所帶來的 SQL 注入的問題。

    只傳參數(shù),比傳遞 SQL 語句更高效。

    相同語句可以一次解析,多次使用,提高處理效率。

    2. 避免數(shù)據(jù)類型的隱式轉(zhuǎn)換

    隱式轉(zhuǎn)換會導(dǎo)致索引失效如:

    select name,phone from customer where id = '111';

    3. 充分利用表上已經(jīng)存在的索引

    避免使用雙%號的查詢條件。如:a like '3%'sql中時間戳轉(zhuǎn)換日期格式,(如果無前置%,只有后置%,是可以用到列上的索引的)

    一個 SQL 只能利用到復(fù)合索引中的一列進行范圍查詢。如:有 a,b,c 列的聯(lián)合索引,在查詢條件中有 a 列的范圍查詢,則在 b,c 列上的索引將不會被用到。

    在定義聯(lián)合索引時,如果 a 列要用到范圍查找的話,就要把 a 列放到聯(lián)合索引的右側(cè),使用 left join 或 not 來優(yōu)化 not in 操作,因為 not in 也通常會使用索引失效。

    4. 數(shù)據(jù)庫設(shè)計時,應(yīng)該要對以后擴展進行考慮5. 程序連接不同的數(shù)據(jù)庫使用不同的賬號,進制跨庫查詢

    ?為數(shù)據(jù)庫遷移和分庫分表留出余地?降低業(yè)務(wù)耦合度?避免權(quán)限過大而產(chǎn)生的安全風(fēng)險

    6. 禁止使用 * 必須使用 查詢

    原因:

    ?消耗更多的 CPU 和 IO 以網(wǎng)絡(luò)帶寬資源?無法使用覆蓋索引?可減少表結(jié)構(gòu)變更帶來的影響

    7. 禁止使用不含字段列表的 語句

    如:

    insert into values ('a','b','c');

    應(yīng)使用:

    insert into t(c1,c2,c3) values ('a','b','c');

    8. 避免使用子查詢,可以把子查詢優(yōu)化為 join 操作

    通常子查詢在 in 子句中,且子查詢中為簡單 SQL(不包含 union、group by、order by、limit 從句) 時,才可以把子查詢轉(zhuǎn)化為關(guān)聯(lián)查詢進行優(yōu)化。

    子查詢性能差的原因:

    子查詢的結(jié)果集無法使用索引,通常子查詢的結(jié)果集會被存儲到臨時表中,不論是內(nèi)存臨時表還是磁盤臨時表都不會存在索引,所以查詢性能會受到一定的影響。特別是對于返回結(jié)果集比較大的子查詢,其對查詢性能的影響也就越大。

    由于子查詢會產(chǎn)生大量的臨時表也沒有索引,所以會消耗過多的 CPU 和 IO 資源,產(chǎn)生大量的慢查詢。

    9. 避免使用 JOIN 關(guān)聯(lián)太多的表

    對于 MySQL 來說,是存在關(guān)聯(lián)緩存的,緩存的大小可以由 參數(shù)進行設(shè)置。

    在 MySQL 中,對于同一個 SQL 多關(guān)聯(lián)(join)一個表,就會多分配一個關(guān)聯(lián)緩存,如果在一個 SQL 中關(guān)聯(lián)的表越多,所占用的內(nèi)存也就越大。

    如果程序中大量的使用了多表關(guān)聯(lián)的操作,同時 設(shè)置的也不合理的情況下,就容易造成服務(wù)器內(nèi)存溢出的情況,就會影響到服務(wù)器數(shù)據(jù)庫性能的穩(wěn)定性。

    同時對于關(guān)聯(lián)操作來說,會產(chǎn)生臨時表操作,影響查詢效率,MySQL 最多允許關(guān)聯(lián) 61 個表,建議不超過 5 個。

    10. 減少同數(shù)據(jù)庫的交互次數(shù)

    數(shù)據(jù)庫更適合處理批量操作,合并多個相同的操作到一起,可以提高處理效率。

    11. 對應(yīng)同一列進行 or 判斷時,使用 in 代替 or

    in 的值不要超過 500 個,in 操作可以更有效的利用索引,or 大多數(shù)情況下很少能利用到索引。

    12. 禁止使用 order by rand() 進行隨機排序

    order by rand() 會把表中所有符合條件的數(shù)據(jù)裝載到內(nèi)存中,然后在內(nèi)存中對所有數(shù)據(jù)根據(jù)隨機生成的值進行排序,并且可能會對每一行都生成一個隨機值,如果滿足條件的數(shù)據(jù)集非常大,就會消耗大量的 CPU 和 IO 及內(nèi)存資源。

    推薦在程序中獲取一個隨機值,然后從數(shù)據(jù)庫中獲取數(shù)據(jù)的方式。

    13. WHERE 從句中禁止對列進行函數(shù)轉(zhuǎn)換和計算

    對列進行函數(shù)轉(zhuǎn)換或計算時會導(dǎo)致無法使用索引

    不推薦:

    where date(create_time)='20190101'

    推薦:

    where create_time >= '20190101' and create_time < '20190102'

    14. 在明顯不會有重復(fù)值時使用 UNION ALL 而不是 UNION

    ?UNION 會把兩個結(jié)果集的所有數(shù)據(jù)放到臨時表中后再進行去重操作?UNION ALL 不會再對結(jié)果集進行去重操作

    15. 拆分復(fù)雜的大 SQL 為多個小 SQL

    ?大 SQL 邏輯上比較復(fù)雜,需要占用大量 CPU 進行計算的 SQL?MySQL 中,一個 SQL 只能使用一個 CPU 進行計算?SQL 拆分后可以通過并行執(zhí)行來提高處理效率

    數(shù)據(jù)庫操作行為規(guī)范1. 超 100 萬行的批量寫 (,,) 操作,要分批多次進行操作

    大批量操作可能會造成嚴重的主從延遲

    主從環(huán)境中,大批量操作可能會造成嚴重的主從延遲,大批量的寫操作一般都需要執(zhí)行一定長的時間, 而只有當主庫上執(zhí)行完成后,才會在其他從庫上執(zhí)行,所以會造成主庫與從庫長時間的延遲情況

    日志為 row 格式時會產(chǎn)生大量的日志

    大批量寫操作會產(chǎn)生大量日志,特別是對于 row 格式二進制數(shù)據(jù)而言,由于在 row 格式中會記錄每一行數(shù)據(jù)的修改,我們一次修改的數(shù)據(jù)越多,產(chǎn)生的日志量也就會越多,日志的傳輸和恢復(fù)所需要的時間也就越長,這也是造成主從延遲的一個原因

    避免產(chǎn)生大事務(wù)操作

    大批量修改數(shù)據(jù),一定是在一個事務(wù)中進行的,這就會造成表中大批量數(shù)據(jù)進行鎖定,從而導(dǎo)致大量的阻塞,阻塞會對 MySQL 的性能產(chǎn)生非常大的影響。

    特別是長時間的阻塞會占滿所有數(shù)據(jù)庫的可用連接,這會使生產(chǎn)環(huán)境中的其他應(yīng)用無法連接到數(shù)據(jù)庫,因此一定要注意大批量寫操作要進行分批

    2. 對于大表使用 pt--- 修改表結(jié)構(gòu)

    ?避免大表修改產(chǎn)生的主從延遲?避免在對表字段進行修改時進行鎖表

    對大表數(shù)據(jù)結(jié)構(gòu)的修改一定要謹慎,會造成嚴重的鎖表操作,尤其是生產(chǎn)環(huán)境,是不能容忍的。

    pt--- 它會首先建立一個與原表結(jié)構(gòu)相同的新表,并且在新表上進行表結(jié)構(gòu)的修改,然后再把原表中的數(shù)據(jù)復(fù)制到新表中,并在原表中增加一些觸發(fā)器。把原表中新增的數(shù)據(jù)也復(fù)制到新表中,在行所有數(shù)據(jù)復(fù)制完成之后,把新表命名成原表,并把原來的表刪除掉。把原來一個 DDL 操作,分解成多個小的批次進行。

    3. 禁止為程序使用的賬號賦予 super 權(quán)限

    ?當達到最大連接數(shù)限制時,還運行 1 個有 super 權(quán)限的用戶連接?super 權(quán)限只能留給 DBA 處理問題的賬號使用

    4. 對于程序連接數(shù)據(jù)庫賬號,遵循權(quán)限最小原則

    ?程序使用數(shù)據(jù)庫賬號只能在一個 DB 下使用,不準跨庫?程序使用的賬號原則上不準有 drop 權(quán)限

    結(jié)束

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權(quán)所有