索引並不是越多越好!索引可以提高查詢效率,但會降低增刪改效率。但多了甚至會降低查詢效率。
innodb是按照主鍵索引的順序來組織表,如沒有建立主鍵,mysql會選擇第乙個非空唯一索引做為主鍵,或生成乙個佔6個位元組的主鍵,自動生成的主鍵效能並不是最好的,所以建立表時最好明確建立乙個主鍵:
1、不使用更新頻繁的列為主鍵,不使用聯合索引作為主鍵,否則會降低效能
2、不使用uuid,md5,hash,字串作為主鍵,無法保證資料自動增長
3、主鍵建議選擇使用自增id值
常見索引列建議:
select、update、delete語句的where從句中列建立索引
包含在order by 、group by、distinct中的字段
多標join的關聯列
復合索引列的順序:
區分度最高的列放在聯合索引的最左側
盡量把字段長度小的列放在聯合索引的最左側
使用頻繁的列放到聯合索引的左側
嚴格控制索引的數量,避免建立冗餘索引和重複索引,如:
冗餘索引,index(a,b,c),index(a,b),index(a)
重複索引,primary key(id),index(id),unique index(id)
對於頻繁的查詢優先考慮使用覆蓋索引,避免inonodb表進行索引的二次查詢,可以把隨機io變為順序io加快查詢效率
覆蓋索引:就是包含了所有查詢欄位的索引
盡量避免使用外來鍵約束,但一定在表與表之間的關聯鍵上建立索引
外來鍵可以用於保證資料的參照完整性,但建議在業務端實現
外來鍵會影響父表和子表的寫操作從而降低效能
mysq建立索引的優缺點
建立索引的優點及必要性 第一 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性 第二 可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因 第三 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義 第四 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和...
mysq索引類別
索引都是在儲存引擎層面實現的 1.btree索引 使用b tree資料結構建立的索引,索引值都是按順序存放的,儲存引擎不需要再全表掃瞄,取而代之的是從索引的根節點開始掃瞄,根節點存放了子節點的指標,隨著向下層查詢,隨著查詢值和節點值的比較 指標中右節點葉值的上下限 最終找到記錄。btree索引可以選...
(索引)建立MySQL索引
建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...