什么是索引,如何合理地建立 Mysql 索引

 2023-10-21 阅读 24 评论 0

摘要:前言 索引基礎知識 建立索引 alter table table_name add index (index_name); 刪除索引 ALTER TABLE table_name DROP INDEX index_name; 什么是索引、查看表中的索引 show index from table_name; 如何優化SQL語句? SQL語句優化的思路: 先看表的數據類型是否涉
前言

索引基礎知識
建立索引

alter table table_name add index (index_name);

刪除索引

ALTER  TABLE  table_name   DROP  INDEX  index_name;

什么是索引、查看表中的索引

show index from table_name;

如何優化SQL語句?

SQL語句優化的思路:

  1. 先看表的數據類型是否涉及得合理,有沒有遵守選取數據類型越簡單越小的原則;
  2. 表中的碎片是否整理;
  3. 表的統計信息是否收集,只有統計信息準確,執行計劃才可以幫助我們優化SQL;
  4. 查看執行計劃,檢查索引的使用情況,沒有用到索引,考慮創建;
  5. 在創建索引之前,還要查看說索引的選擇性,來判斷這個字段是否合適創建索引(盡量選擇重復值少的字段)。
  6. 創建索引之后,再查看一下執行計劃,對比兩次結果,看是否查詢效率提高了。

合理創建索引的三個 “經常”:

  1. 經常被查詢的列(一般放在where 條件后面);
  2. 經常用于表連接的列;
  3. 經常排序分組的列(order by 或者 group by 后面的字段)。

一個案例分析創建索引前后的效率區別

建立索引之前,需要確定建立該索引是否對查詢效率有幫助,我們可以通過explain來查看某個查詢語句的查詢計劃:

EXPLAIN select * from t where name = '45126-NAME'

卡索引?在這里插入圖片描述

  • type,如果出現all關鍵字,代表是全表掃描
  • key,如果是Null代表沒有使用索引
  • rows,表示在SQL執行過程中被掃描的行數,該數值越大,意味著耗時越大
  • extra,如果出現Using filesort 或者 Using temporary關鍵字,將很影響數據庫性能
  • filtered,指返回結果的行占需要獨到的行的百分比

然后,我們給t表的name字段添加索引:

alter table t add index (name)

再查看執行計劃:
在這里插入圖片描述
可以看到,添加索引后,rows值從59912變成了1,說明實際掃描行數變得很短,掃描時間相應的變短了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/153950.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息