有了索引,我們根據索引為條件進行數據查詢速度就非常快
① 索引本身有”算法”支持,可以快速定位我們要找到的關鍵字(字段)
② 索引字段與物理地址有直接對應,幫助我們快速定位要找到的信息
一個數據表的全部字段都可以設置索引
#### 類型
四種類型:
① 主鍵 primary key
auto\_increment必須給主鍵索引設置
信息內容要求不能為null,唯一
② 唯一 unique index
信息內容不能重復
③ 普通 index
沒有具體要求
④ 全文 fulltext index
myisam數據表可以設置該索引
復合索引:索引關聯的字段是多個組成的,該索引就是復合索引。

#### 添加索引

創建一個復合索引:
索引沒有名稱,默認把第一個字段取出來當做名稱使用。


#### 刪除索引
alter table 表名 drop primary key; //刪除主鍵索引
注意:該主鍵字段如果存在auto\_increment屬性,需要先刪除之
alter table 表名 modify 主鍵 int not null comment ‘主鍵’;
去除數據表主鍵字段的auto\_increment屬性:


禁止刪除主鍵,原因是內部有auto\_increment屬性:

alter table 表名 drop index 索引名稱; //刪除其他索引(唯一、普通、全文)
刪除主鍵:

刪除其他索引:

#### 執行計劃
針對查詢語句設置執行計劃,當前數據庫只有查詢語句支持執行計劃。
每個select查詢sql語句執行之前,需要把該語句需要用到的各方面資源都計劃好
例如:cpu資源、內存資源、索引支持、涉及到的數據量等資源
查詢sql語句真實執行之前所有的資源計劃就是執行計劃。
我們討論的執行計劃,就是看看一個查詢sql語句是否可以使用上索引。
具體操作:
explain 查詢sql語句\\G;
1條 sql語句在沒有執行之前,可以看一下執行計劃。

主鍵索引刪除后,該查詢語句的執行計劃就沒有使用索引(執行速度、效率低)

#### 索引覆蓋
給ename和job設置一個復合索引


索引覆蓋:我們查詢的全部字段(ename,job)已經在索引里邊存在,就直接獲取即可
不用到數據表中再獲取了。因此成為”索引覆蓋”
該查詢速度非常快,效率高,該索引也稱為”黃金索引”
索引本身需要消耗資源的(空間資源、升級維護困難):// .MYI 文件
#### 索引原則
##### 字段獨立原則
**select \* from emp where empno=1325467**; //empno條件字段獨立
select \* from emp where empno+2=1325467; //empno條件字段不獨立
只有獨立的條件字段才可以使用索引
獨立的條件字段可以使用索引, 不獨立的條件字段不給使用索引
##### 左原則
模糊查詢,like % \_
%:關聯多個模糊內容
\_: 關聯一個模糊內容
select \* from 表名 like “beijing%”; //使用索引
select \* from 表名 like “beijing\_”; //索引索引
查詢條件信息在左邊出現,就給使用索引
XXX% YYY\_ 使用索引
%AAA% \_ABC\_ %UUU 不使用索引
沒有使用索引(中間條件查詢):


左原則使用到索引

##### 復合索引
ename復合索引 內部有兩個字段(ename,job)
① ename(前者字段)作為查詢條件可以使用復合索引
② job(后者字段)作為查詢條件不能使用復合索引
復合索引的第一個字段可以使用索引:

復合索引的其余字段不能使用索引:

如果第一個字段的內容已經確定好,第二個字段也可以使用索引:

##### or原則
OR左右的關聯條件必須都具備索引 才可以使用索引:

or的左右,只有一個有索引,導致整體都沒有的使用:

#### 索引設計
要估算每個數據表全部的查詢sql語句類型
分析、統計每個sql語句的特點(where/order by/or等等)
原則:
① 被頻繁執行的sql語句要設置
② 執行時間比較長的sql語句(可以統計)
③ 業務邏輯比較重要的sql語句(例如支付寶2小時內答應返現的業務邏輯)
##### 前綴索引
設計索引的字段,不使用全部內容,而只使用該字段前邊一部分內容。
如果字段的前邊N位的信息已經可以足夠標識當前記錄信息,就可以把前邊N位信息設置為索引內容,好處:索引占據的物理空間小、運行速度就非常快。
具體實現:
① 操作 alter table 表名 add index (字段(位數))
② 前邊到底取得多少位,才是記錄的唯一標識
總記錄數目/前n位記錄數目 = 比值;
select count(\*) from 表名;
mysql字符串截取:substring(字段,開始位置1開始,長度)

從結果可以看出,密碼的前9位就可以唯一標識當前記錄信息:

##### 設計原則
字段內容需要足夠花樣,性別字段不適合做索引
##### 全文索引

Mysql5.5 Myisam存儲引擎 支持全文索引
Mysql5.6 Myisam和Innodb存儲引擎 都支持全文索引
目前中文不支持全文索引。
建個表


需要變形為match() against()才可以使用全文索引:


- PHP
- 頁面跳轉
- 數據類型和運算符
- 整形
- 浮點型
- 字符串型
- 布爾型
- 判斷數據類型
- 傳值
- 類型轉換
- 常量
- 進制轉換
- 運算符
- 各種結構
- 數組
- 分類
- 創建
- 多維數組
- 數組操作函數
- 數組指針
- 排序
- 數組交換需要注意的
- 函數
- 創建函數
- 參數傳遞
- 參數數量問題
- 返回值
- 可變函數
- 匿名函數
- 冒泡,選擇,二分
- 變量的作用域
- 局部作用域中使用全局
- use
- 有關函數的系統函數
- 遞歸
- 遞推(迭代)
- 面向對象
- 類和對象
- 值傳遞
- 引用傳遞
- 成員
- 構造和析構調用上級同類方法
- 重寫
- 最終類
- 最終方法
- 設計模式
- 抽象類
- 抽象方法
- 抽象類和抽象方法的細節
- 重載
- 接口
- 類和接口的總結
- 自動加載
- 克隆
- 對象的遍歷
- 內置標準類
- 其他類型轉對象類型
- 類型約束
- 魔術方法
- static關鍵字
- 命名空間
- 子級空間
- 引入機制
- 公共空間
- 使用注意
- 錯誤處理
- 錯誤的觸發
- 錯誤報告的顯示
- 錯誤日志的記錄問題
- 自定義錯誤處理器
- 異常拋出
- 文件鎖
- 文件處理
- 序列化與反序列化
- 目錄操作
- 文件操作
- 文件上傳
- $_FILFS
- 多文件上傳處理
- 繪圖技術
- 創建畫布資源
- 操作畫布
- 導出
- 銷毀資源
- 驗證碼
- 補充文件居中
- 在圖像上寫入一行TTF字體的文本
- 獲得圖像相關信息
- 水印
- 等比例縮放
- 常見錯誤
- HTTP協議
- URL的構成
- 請求
- 防盜鏈
- 響應
- 使用header()禁用緩存
- 下載文件的HTTP響應頭
- 文件下載
- HTTPS
- 會話技術
- cookie
- session
- PHP操作MySQL函數
- 登錄
- 一些函數
- 從結果集中取出一行數據
- 獲取行數,列數,字段名
- 安全
- 緩存
- 補充
- MySQL
- 語法
- 備份和恢復
- 注釋
- 語句行
- 字符集
- 校驗級
- 存儲引擎
- 數據庫操作
- 創建數據庫
- 刪除數據庫
- 顯示數據庫
- 修改數據庫
- 數據類型
- 整數類型
- 小數類型
- 日期時間型
- 字符和文本型
- enum類型
- set類型
- 時間類型
- 表操作
- 創建
- 索引
- 約束
- 表選項列表
- 表的其他語句
- 視圖語法
- 增刪改查
- 插入數據(增)
- 刪除數據(刪)
- 修改數據(改)
- 查詢(查)
- 用戶和權限管理
- 用戶管理
- 權限管理
- PDO
- 與PDO相關的幾個類
- 連接數據庫
- 使用
- PDO的錯誤處理
- PDO結果集對象
- pdo結果集對象的常用方法
- PDO預處理
- 常用屬性
- mysql編程
- 事務
- 語句塊
- mysql中的變量
- (存儲)函數
- 存儲過程procedure
- 觸發器(trigger)
- mysql優化
- 存儲引擎
- 字段類型
- 逆范式
- 索引
- Memcache
- 與redis區別
- 安裝
- php開啟擴展
- php操作memcache
- Key的命名
- 有效期
- 各種數據類型存儲
- 刪除
- 第三個參數壓縮作用
- 其他相關操作方法
- 終端命令操作方式
- 獲取memcache統計信息
- Git
- 創建一個git倉庫
- 添加
- 修改文件
- 刪除文件
- 克隆
- 個人網站
- Ajax
- 發起請求
- 接受響應
- 常用屬性和方法
- get和post
- get
- post
- 同步和異步
- 什么時候使用同步請求?
- 分頁
- xml的接收和處理
- JSON
- 無刷新表單提交和進度條
- JQuery操作ajax
- iframe
- 郵件
- 介紹
- 發送郵件
- 直投郵件
- 中轉郵件發送
- phpmailer
- 正則表達
- 簡單使用
- preg_match()
- 正則內容
- 定義字符集
- 特別字符集
- 組合字符集
- 限制字符
- 模式修正符
- 進行全局匹配