日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

數(shù)據(jù)庫(kù)慢查詢介紹并優(yōu)化

作者:多放香菜少加蔥 更新時(shí)間: 2022-07-21 編程語(yǔ)言

一.數(shù)據(jù)庫(kù)查詢慢的原因
我們可以把查詢SQL執(zhí)行看做是一個(gè)任務(wù)的話,那它是由一些列子任務(wù)組成的,每個(gè)子任務(wù)都存在一定的時(shí)間消耗。通常情況下,導(dǎo)致慢查詢最根本的問(wèn)題就是需要訪問(wèn)的數(shù)據(jù)太多,

導(dǎo)致查詢不可避免的需要篩選大量的數(shù)據(jù)。
面對(duì)慢查詢,我們需要注意以下兩點(diǎn):
(1)查詢了過(guò)多不需要的數(shù)據(jù)
(2)掃描了額外的記

二.新數(shù)據(jù)庫(kù)腳本慢,有何原因?
一個(gè) SQL 執(zhí)行的很慢,我們要分兩種情況討論:
1、大多數(shù)情況下很正常,偶爾很慢,則有如下原因
(1)、數(shù)據(jù)庫(kù)在刷新臟頁(yè),例如 redo log 寫滿了需要同步到磁盤。
(2)、執(zhí)行的時(shí)候,遇到鎖,如表鎖、行鎖。
2、這條 SQL 語(yǔ)句一直執(zhí)行的很慢,則有如下原因。
(1)、沒(méi)有用上索引:例如該字段沒(méi)有索引;由于對(duì)字段進(jìn)行運(yùn)算、函數(shù)操作導(dǎo)致無(wú)法用索引。
(2)、數(shù)據(jù)庫(kù)選錯(cuò)了索引。
三.mysql中using的用法為:
using()用于兩張表的join查詢,要求using()指定的列在兩個(gè)表中均存在,并使用之用于join的條件。
示例:
select a., b. from a left join b using(colA);
等同于:
select a., b. from a left join b on a.colA = b.colA;

四.索引的作用

  1. 索引是什么,首先我們可以舉個(gè)例子,字典大家應(yīng)該都使用過(guò),我們可以使用目錄快速定位到所要查找的內(nèi)容,那么索引跟目錄的作用類似,在數(shù)據(jù)庫(kù)表記錄中,利用索引,可以快速過(guò)濾查找到數(shù)據(jù)記錄。

  2. 索引類型分類
    2.1 普通索引
    加快查詢速度
    2.2 唯一索引
    加快查詢速度,并且可以限制列值的唯一性,允許為空
    唯一索引包括聯(lián)合唯一索引,多列形成的唯一索引,這些列可以唯一確定一條表記錄,可以為空
    2.3 全文索引
    主要針對(duì)文本的內(nèi)容進(jìn)行分詞,加快查詢速度
    2.4 聯(lián)合索引
    多列組成的索引,查詢效率提升高于多個(gè)單列索引合并的效率
    2.5 主鍵索引
    主鍵唯一性,加快查詢速度,不能為空

  3. 索引結(jié)構(gòu)分類
    索引有很多分類,例如B-tree索引,哈希索引,全文索引等等,索引的實(shí)現(xiàn)是在存儲(chǔ)引擎層,并不是在后端服務(wù)器層,所以不同的存儲(chǔ)引擎支持的索引結(jié)構(gòu)也不一定一樣
    3.1 B-tree索引
    B-tree 索引普遍存在于存儲(chǔ)引擎中,他使用B-tree數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),如果對(duì)樹形數(shù)據(jù)結(jié)構(gòu)比較了解的話,就知道B-tree索引所帶來(lái)的好處了,他的每個(gè)葉子節(jié)點(diǎn)都會(huì)包含下一個(gè)節(jié)點(diǎn)的指針,非常方便查詢數(shù)據(jù)
    B-tree 適用于全鍵值,鍵值范圍,或者前綴查找
    3.2 哈希索引
    哈希索引基于哈希表實(shí)現(xiàn),對(duì)于每一行數(shù)據(jù),存儲(chǔ)引擎會(huì)對(duì)所有的索引列計(jì)算一個(gè)哈希碼,然后存儲(chǔ)引擎會(huì)基于這個(gè)哈希碼來(lái)查找數(shù)據(jù),小編感覺(jué)有點(diǎn)像HashMap 中槽的查詢過(guò)程
    3.3 全文索引
    全文索引在幾種索引結(jié)構(gòu)類型中比較特殊,他查找的是文本中關(guān)鍵詞
    4. 索引的正確使用
    索引是建立在系統(tǒng)文件上的,會(huì)占用一定的內(nèi)存空間,另外數(shù)據(jù)在更新的時(shí)候也會(huì)去維護(hù)索引,消耗內(nèi)存,所以索引一定要正確的使用,索引并不是越多越好,要根據(jù)具體的查詢業(yè)務(wù)來(lái)規(guī)劃索引的建立。
    建議不要使用索引的幾種情況:

    1.區(qū)分度不是很大的字段,例如 性別 sex
    2.頻繁更新的字段
    3.字符串類型的字段 或者 文本類型的字段
    4.不在where列中出現(xiàn)的索引
    索引失效的幾種情況:
    1.查詢列中有函數(shù)計(jì)算
    2. 查詢列中有模糊查詢,“%cloum”,可以使用"cloum%" 代替,如果要使用"%column%",那么select 列中是索引列
    3.如果查詢條件中有or, 索引會(huì)失效,除非所有條件都加上索引
    4.使用不等于(!= 或者 <>)
    5.is null 或者 is not null
    6.字符串不加引號(hào),會(huì)導(dǎo)致索引失效
    7.最左原則,聯(lián)合索引中會(huì)遵循最左原則,即如果要使用聯(lián)合索引,那么前面的索引列一定要包含,舉個(gè)例子,
    有個(gè)聯(lián)合索引(a,b,c) 那么查詢條件中只能是 a=1 或者 a=1 and b=1 或者 a=1 and b=1 and c=1,不然索引就會(huì)失效

原文鏈接:https://blog.csdn.net/qq_41512902/article/details/125617051

欄目分類
最近更新