怎么查看mysql使用的什么引擎 mysql:一條SQL查詢語句是如何執(zhí)行的?
mysql:一條SQL查詢語句是如何執(zhí)行的?/*在單引號(hào)中間填要執(zhí)行的sql語句*/2020-07-12:什么是索引回表,如何避免?2020-07-12:什么是索引回表,如何能盡量的避免?必須,數(shù)據(jù)庫
mysql:一條SQL查詢語句是如何執(zhí)行的?
/*在單引號(hào)中間填要執(zhí)行的sql語句*/
2020-07-12:什么是索引回表,如何避免?
2020-07-12:什么是索引回表,如何能盡量的避免?
必須,數(shù)據(jù)庫中的索引是什么?
摘錄低性能mysql中的一句話:索引(mysql也叫做鍵(key))是存儲(chǔ)引擎用于迅速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。
這句話有兩個(gè)點(diǎn):存儲(chǔ)引擎和數(shù)據(jù)結(jié)構(gòu)。是需要再理解索引是在存儲(chǔ)引擎層而非服務(wù)器層實(shí)現(xiàn)程序。而mysql統(tǒng)稱多種存儲(chǔ)引擎,這里我們只探討一番myisam和InnoDB。兩者都支持BTree(一種數(shù)據(jù)結(jié)構(gòu))索引。
假如說這個(gè)解釋不了,有一個(gè)簡單通俗的方法。書也有目錄,快速可以找到自己不需要內(nèi)容的方法,是一欄目錄,索引就是數(shù)據(jù)庫表數(shù)據(jù)的目錄。
輪回問題:索引直接導(dǎo)致的回表問題。索引為什么會(huì)誘發(fā)回表?
下面我們來舉例一種情況,一個(gè)表有三個(gè)字段ID,name,age,將ID系統(tǒng)設(shè)置成主鍵索引,name設(shè)成輔助索引。
然后把來看下下面的sql:
*fromtwhereid5
*acrosstwherename張三;
兩個(gè)很很簡單的Sql。
另一個(gè)sql不用什么說,真接實(shí)際主鍵索引,從樹上真接是可以換取結(jié)果。
第二個(gè)sql:簡單name,mysql并沒法得到所有列的信息(也就是*),只有能得到主鍵ID,后再會(huì)依據(jù)什么ID在參與二次可以查詢,這就引發(fā)了回表問題。這那就是為么又不能不使用*的原因。
那你怎莫能解決呢?
第一別寫*。
第二依靠兩種索引,也就是說你據(jù)業(yè)務(wù)實(shí)際需要,將必須的字段無法形成配對(duì)組合索引。