在mysql中,索引是一種特殊的數據庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。
創新互聯主要從事網站設計、網站建設、網頁設計、企業做網站、公司建網站等業務。立足成都服務柳北,10余年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:028-86922220
通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列即可。
通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列。否則,數據庫系統將讀取每條記錄的所有信息進行匹配。
可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節省時間。
因此,使用索引可以很大程度上提高數據庫的查詢速度,還有效的提高了數據庫系統的性能。
索引的優缺點
索引有其明顯的優勢,也有其不可避免的缺點。
優點
索引的優點如下:
1、通過創建唯一索引可以保證數據庫表中每一行數據的唯一性。
2、可以給所有的 MySQL 列類型設置索引。
3、可以大大加快數據的查詢速度,這是使用索引最主要的原因。
4、在實現數據的參考完整性方面可以加速表與表之間的連接。
5、在使用分組和排序子句進行數據查詢時也可以顯著減少查詢中分組和排序的時間
缺點
增加索引也有許多不利的方面,主要如下:
1、創建和維護索引組要耗費時間,并且隨著數據量的增加所耗費的時間也會增加。
2、索引需要占磁盤空間,除了數據表占數據空間以外,每一個索引還要占一定的物理空間。如果有大量的索引,索引文件可能比數據文件更快達到最大文件尺寸。
3、當對表中的數據進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了數據的維護速度。
使用索引時,需要綜合考慮索引的優點和缺點。
mysql 添加索引后 在查詢的時候是mysql就自動從索引里面查詢了。如果需要也可以單獨根據索引查詢,這個看使用場景
MYSQL在創建索引后對索引的使用方式分為兩種:
1 由數據庫的查詢優化器自動判斷是否使用索引;
2 用戶可在寫SQL語句時強制使用索引
一共3張表 knowledge , knowledge_question , knowledge_answer ,數據在 6000~10000 之間。
執行的語句:
執行時間約 10分鐘 ,查看執行計劃如下:
全部都是全表掃描,根據MySQL聯表查詢的算法 Nested-Loop Join ,MySQL查詢的結果集是3張表的笛卡爾積,所以效率特別低。
耗時變成 20毫秒
給Where條件建立索引,并不一定會使用。
比如:在表 knowledge 的字段 update 上建立索引 idx_time :
結果執行上來看,并沒有使用索引 idx_time 。
如果where條件從 k.update_time'2019-01-03 12:00:00' 修改為 k.update_time='2019-01-03 12:00:00' (從 變成 = )
則會使用索引 idx_time
在建立索引的時候,會遇到 Table Metadata Lock 的問題,可以先 show processlist ,找到占用表鎖的連接,然后 kill 。
假如你有一個表, SQL CREATE TABLE test_tab (2 id INT, 3 name VARCHAR(10), 4 age INT, 5 val VARCHAR(10)6 );你的業務,有一個查詢,是 SELECT * FROM test_tab WHERE name = 一個外部輸入的數據 剛開始,數據不多的時候,執行效果還不錯。 隨著數據量的增加,這個查詢,執行起來,越來越慢了。 然后在 name 上面 建立了索引 CREATE INDEX idx_test4_name ON test_tab (name ); 這樣, 可以加快前面那個查詢的速度。 但是,某天,你執行了下面這個SQL, 發現速度又慢了 SELECT * FROM test_tab WHERE age = 25 為啥呢? 因為 age 字段上面,沒有索引 索引只在 name 上面有 換句話說, 也就是 WHERE 里面的條件, 會自動判斷,有沒有 可用的索引,如果有, 該不該用。 多列索引,就是一個索引,包含了2個字段。 例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '張%' AND age = 25 這樣的查詢,將能夠使用上面的索引。 多列索引,還有一個可用的情況就是, 某些情況下,可能查詢,只訪問索引就足夠了, 不需要再訪問表了。例如:SELECTAVG( avg ) AS 平均年齡FROMtest_tabWHEREname LIKE '張%' 這個時候, name 與 age 都包含在索引里面。 查詢不需要去檢索表中的數據。
explain SELECT count(1) FROM goods_order use index(INDEX_ORDER_TYPE) where ORDER_TYPE=0;
網站標題:mysql怎么按索引查詢,mysql如何使用索引查詢
當前鏈接:http://m.kartarina.com/article12/hddddc.html
成都網站建設公司_創新互聯,為您提供網站建設、電子商務、云服務器、虛擬主機、響應式網站、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯