## **什么是索引**
#### **什么是索引?**
簡單點說 ,在關系數據庫中,索引是一種單獨的,物理的對數據庫表中一列或者多列的值進行排序的一種存儲結構。相當于圖書的目錄,可以根據目錄中的頁碼快速找到需要的內容。
索引提供指向存儲在表中的指定列的數據值的指針, 根據你指定的排序順序對這些指針排序。數據庫使用索引找到特定值,然后順指針找到包含該值得行。
當表中有大量記錄時,對表查詢,如果是全表搜索,是將所有記錄一一取出,和查詢條件對比,然后返回滿足條件的記錄,這樣消耗大量數據庫系統時間,并造成大量磁盤I/O。 第二種就是在表中建立索引,然后在索引中找到符合查詢條件的索引值,最后通過保存在索引中的ROWID 快速找到表中對應的記錄。
索引是為了加速對表中的數據行的檢索而創建的一種分散的存儲結構。索引頁面中的行都有邏輯指針。
#### **索引的作用?**
1.快速讀取數據
2.保證數據記錄的唯一性
3.實現表與表之間的參照完整性
4.在使用orderby ,group by子句進行檢索時,索引可以減少排序和分組的時間。
#### **優點:**
1.大大加快數據的檢索速度
2.創建唯一性索引,保證數據庫中的每一行數據的唯一性。
3.加速表與表之間的連接
4.在使用分組和排序進行檢索時,可以顯著的減少查詢的時間。
#### **缺點:**
1.索引占物理空間,
2.當對表中的數據進行增加,刪除和修改的時候,索引也要動態的維護,降低了數據的維護速度。
#### **索引類型:**
單列索引、唯一索引、主鍵索引和聚集索引。
1.普通索引:沒有唯一性的限制,允許為空。可以直接創建create index name on tablename
修改表的時候 alert table tablename add index name ;? 創建表的時候 create table tablename( ..index name col)
2.唯一索引:unique index? 沒有任何兩行具有相同索引值。
3.主鍵索引:數據庫中的一列或者列組合的值 唯一標識表中的每一行,該列為表的主鍵。一個表只能有一個主鍵,不允許為空,一般在建表的時候同事創建。
- PHP篇
- 函數傳值和傳引用的區別
- 簡述PHP的垃圾回收機制
- 簡述CGI、FAST-CGI、PHP-FPM的關系
- 常見正則表達式
- 多進程寫文件,如何保證都寫成功
- php支持回調函數的數組函數
- MySQL篇
- MySQL的兩種存儲引擎區別
- 事務的四大特性
- 數據庫事務隔離級別
- 什么是索引
- 索引有哪些數據結構,優缺點
- 索引的一些潛規則
- SQL的優化方案
- 簡述MySQL的鎖機制
- 死鎖是怎么產生的?怎么解決?
- 簡述MySQL的主從復制過程,延遲問題怎么解決
- 分布式事務的解決方案
- 數據庫中間件MyCat
- Linux篇
- Linux常用命令
- 對日志文件的IP出現的次數進行統計,并顯示次數最多的前5名
- WEB篇
- 跨域是怎么產生的,如何解決跨域
- Redis篇
- redis介紹
- redis和memcached區別
- redis的持久化方案
- 緩存穿透、擊穿、雪崩、預熱、更新、降級
- 網絡篇
- 計算機網絡體系結構
- 簡述TCP的三次握手、四次揮手過程
- UDP、TCP 區別,適用場景
- HTTP常見狀態碼含義
- 設計模式篇
- 單例模式
- 簡單工廠模式
- 抽象工廠模式
- 觀察者模式
- 策略模式
- 注冊模式
- 適配器模式
- 安全篇
- 跨站腳本攻擊(XSS)
- 跨站點請求偽造(CSRF)
- SQL 注入
- 應用層拒絕服務攻擊
- PHP安全
- 運維篇
- docker面試題
- 消息隊列篇
- 架構篇
- 數據結構與算法篇