1.2.2、什么是執(zhí)行計劃:a.決定如何訪問表數(shù)據(jù),是否通過索引,是否排序等。b.多表關(guān)聯(lián)是先訪問哪個表。c.多表關(guān)聯(lián)時,使用哪種連接方式,不過現(xiàn)在MySQL只有嵌套連接(嵌套循環(huán),顧名思義就是將一個表為出發(fā)點,將該表全部記錄逐條去遍歷另外一張表的記錄)。
1.2.3、SQL執(zhí)行順序:a.檢查語法是否正確。b.檢查表是否存在、權(quán)限是否滿足等。c.根據(jù)統(tǒng)計信息(如data length,rows,index length、索引唯一度),生成較優(yōu)的執(zhí)行計劃。d.根據(jù)執(zhí)行計劃,進行數(shù)據(jù)檢索、過濾、合并、排序等操作。訪問數(shù)據(jù)時,內(nèi)存中如存在表數(shù)據(jù),則直接進行操作;否則,從磁帶讀取表數(shù)據(jù),放入內(nèi)存,再進行操作;如內(nèi)存不足,則內(nèi)存中較冷數(shù)據(jù)涮出內(nèi)存,再從內(nèi)存中讀取數(shù)據(jù)。
1.2.4、索引:查詢的時候如果使用上了索引,可以提高效率,因為建立了索引后,可以理解為數(shù)據(jù)字典的結(jié)構(gòu)存儲,因此根據(jù)條件查詢的時候更加高效。下面看一下MySQL常用的索引類型的概念。
a.普通索引:在創(chuàng)建普通索引時,不附加任何限制條件。這類索引可以創(chuàng)建在任何數(shù)據(jù)類型中,其值是否唯一和非空由字段本身的完整性約束條件決定。建立索引以后,查詢時可以通過索引進行查詢。例如,在student表的stu_id字段上建立一個普通索引。查詢記錄時,就可以根據(jù)該索引進行查詢。
b.唯一性索引:使用UNIQUE參數(shù)可以設(shè)置索引為唯一性索引。在創(chuàng)建唯一性索引時,限制該索引的值必須是唯一的。例如,在student表的stu_name字段中創(chuàng)建唯一性索引,那么stu_name字段的值就必需是唯一的。通過唯一性索引,可以更快速地確定某條記錄。主鍵就是一種特殊唯一性索引。
c.單列索引:在表中的單個字段上創(chuàng)建索引。單列索引只根據(jù)該字段進行索引。單列索引可以是普通索引,也可以是唯一性索引,還可以是全文索引。只要保證該索引只對應一個字段 即可。
d.多列索引:多列索引是在表的多個字段上創(chuàng)建一個索引。該索引指向創(chuàng)建時對應的多個字段,可以通過這幾個字段進行查詢。但是,只有查詢條件中使用了這些字段中第一個字段時,索引才會被使用。例如,在表中的id、name和sex字段上建立一個多列索引,那么,只有查詢條件使用了id字段時該索引才會被使用。
e . 全文索引:使用FULLTEXT參數(shù)可以設(shè)置索引為全文索引。全文索引只能創(chuàng)建在CHAR、VARCHAR或TEXT類型的字段上。查詢數(shù)據(jù)量較大的字符串類型的字段時,使用全文索引可以提高查詢速度。例如,student表的information字段是TEXT類型,該字段包含了很多的文字信息。在information字段上建立全文索引后,可以提高查詢information字段的速度。MySQL數(shù)據(jù)庫從3.23.23版開始支持全文索引,但只有MyISAM存儲引擎支持全文檢索。在默認情況下,全文索引的搜索執(zhí)行方式不區(qū)分大小寫。但索引的列使用二進制排序后,可以執(zhí)行區(qū)分大小寫的全文索引。