日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java学习与总结:索引

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java学习与总结:索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 索引的優缺點
  • 索引的底層數據結構
  • 索引類型
  • 索引存儲結構【不同存儲引擎不同】
  • 聯合索引和覆蓋索引
  • 創建索引的注意事項
  • 索引失效的情況

索引的優缺點

優點:能加快查找速度。【前提是數據量大,否則沒啥用其實】
缺點:需要維護,犧牲空間。

索引的底層數據結構

  • hash表【特點:無序】
    • 優點: 單值查找快。
    • 缺點:哈希沖突,并且不支持范圍查找。
  • B+樹【特點:有序】
    • 為什么不是平衡樹、紅黑樹、B樹,而是B+樹呢?
      - 簡單來說,前面的幾種樹都有缺點。
      - 平衡樹:極限情況會退化成鏈表,就沒有意義了。
      - 紅黑樹:索引的瓶頸–》io–》平均下來就是樹的高度–》紅黑樹的高度太高相對B+樹來說太高。
      - B樹:數據會放在非葉子節點,樹的高度因此也比B+樹高。

索引類型

  • 主鍵索引:唯一,一個表只允許有一個主鍵索引,并且不能為空
  • 二級索引
    • 唯一索引:唯一,一個表允許多個唯一索引,并且允許為空
    • 普通索引
    • 前綴索引
    • 全文索引:檢索大文本數據中的關鍵字的信息

索引存儲結構【不同存儲引擎不同】

  • 聚簇索引:innodb

    • 特點:數據和索引存儲在一起
    • 優點:不用回表,查找速度快
    • 缺點:索引維護代價大
  • 非聚簇索引: myisam

    • 特點:數據和索引分開放
    • 優點:加了主鍵這一層,解耦,所以維護代價低
    • 缺點:多加了一層,所以查找速度慢,需要回表
    • 注意:二級索引都是非聚簇索引

問題:非聚簇索引一定會回表嗎?

  • select age from db where age>20
  • 覆蓋索引,如果能從索引里找到的,就不用回表了

聯合索引和覆蓋索引

  • 聯合索引:聯合索引不是一種類型,而是說用了多列索引,跟之相互匹配的還有最左匹配原則。
    • 最左匹配原則:索引從左到右匹配
    • 建立聯合索引的幾個原則:
      • 最經常用的放在左邊【最左匹配原則】;
      • 區分度最高的放在左邊 【最高離散度原則】;
      • 寬度小的放在左邊【最小空間原則
  • 覆蓋索引:本質是一種特殊的聯合索引,把select 后需要的列也加入到聯合索引之中
    • 優點:不用回表

創建索引的注意事項

  • 1、選擇合適的字段【where、order by 、join 、select —不為null的字段】
  • 2、更新頻繁的最好不要建立索引,維護成本高
  • 3、盡可能考慮建立聯合索引而不是單列索引,并且盡量考慮覆蓋索引
    • 優點: 空間變小、需要維護的索引數量變小
  • 4、避免冗余索引—需要維護
  • 5、考慮使用前綴索引代替普通索引
  • 6、不能join太多表,join都是通過嵌套循環實現的。匹配次數、join buffer 緩存

索引失效的情況

  • 1、聯合索引
    • a. 聯合索引不遵循最左匹配原則
    • b. 聯合索引前面索引列使用了范圍查詢(<,>,like),這里>=不會失效
  • 2、索引上做任何操作
    • a. 計算
    • b. 函數
    • c. 隱式轉換 最常見的:字符串類型不添加引號
  • 3、判空,is null和is not null 都無法使用索引
  • 4、使用or 索引會失效,能用in盡量用in:age =3 or age =1 ===>盡量換成 age in(3,1)
  • 5、鏈表關聯使用的字段中的長度、編碼不一致會導致失效===》本質上是隱式轉換
  • 6、模糊查詢,以%開頭的like會讓索引失效—》type=all,全表查詢**。這里可以使用覆蓋索引解決%前置失效的問題**
  • 7、優化器,覺得如果使用全表掃描比使用索引快,也會導致索引失效。

總結

以上是生活随笔為你收集整理的java学习与总结:索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。