什麼是索引?
索引是一種儲存引擎快速找到記錄的資料結構,也可說就是資料的目錄。索引檔以B-Tree格式儲存
索引的作用?
1.索引能加快資料的檢索查找,也能加快資料的分組和排序;
2.索引能保證資料的唯一性
3.索引能加快關係表的連線速度
索引的缺點?
1.索引的建立和維護需要消耗時間,且隨索引量的增加而增加
2.索引的建立需要消耗物理空間
3.表中資料進行增刪改時,索引也需要動態維護
為什麼能夠提高查詢速度?
主要是順序查找的效率要比B tree的結構查找效率低(這個待詳細了解)
索引類型?
1.主鍵索引
primark key 它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引。注意:一個表只能有一個主鍵。
2.唯一索引
唯一索引設定的關鍵字unique 唯一索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
3.普通索引
這是最基本的索引,它沒有任何限制。
4.複合索引
即一個索引包含多個資料列,多用於避免回表查詢
5.全文索引
1. -- 1.新增PRIMARY KEY(主鍵索引)
ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) ;
2. -- 2.新增UNIQUE(唯一索引)
## ALTER TAB `table_ALTER `table_`table) UNIQUE (`column`);
3. -- 3.新增INDEX(普通索引)
ALTER TABLE `table_name` ADD INDEX index_name (`column`);# # #4. -- 4.新增FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT (`column`);
5. -- 5.新增多列索引
#
ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`);
索引一經建立不能修改,如果要修改索引,只能刪除重建。可以使用DROP INDEX index_name ON table_name;刪除索引。
為什麼在單列索引的基礎上還需要組合索引?
因為在不建立組合索引的前提下 mysql只會用到其中一個最有效率的索引 ,效率平庸
組合索引的最左邊原則是什麼?
組合索引usernname,city,age,其實相當於分別建立了下面三組組合索引:
1.usernname,city,age ;2.usernname,city;3.usernname
為什麼沒有city,讓age這樣的組合索引?這是因為MySQL組合索引「最左前綴」的結果。簡單的理解就是只從最左邊的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:
SELECT * FROM mytable WHREE username="admin" AND city="鄭州"SELECT * FROM mytable WHREE username="admin"
#而下面幾個則不會用到:
SELECT * FROM mytable WHREE age=20 AND city="鄭. mytable WHREE city="鄭州"
建立索引的原則:
最左原則
#基數小的表最好不要建立索引
盡量選擇區分度高的資料列作為索引
盡量的擴充索引,不要新建索引。
為經常需要作為查詢條件、排序、分組和聯合運算的欄位建立索引
限制索引的數目,不要盲目地建立索引
盡量使用資料量少的索引,使用前綴做索引
刪除不再使用或很少使用的索引
#關於索引的最佳化:
#避免在索引列上使用計算
#避免在索引列上使用not
避免在索引列上使用is null 和is not null
遵守索引的最左原則
應盡量避免在where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描
模糊查詢不能前置百分號,否則導致全表掃描
#where 子句中使用or 來連接條件將導致引擎放棄使用索引而進行全表掃描
如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不會使用索引
以上是有關索引的知識點的詳細內容。更多資訊請關注PHP中文網其他相關文章!