欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 90%程序員面試會遇到的索引優化問題

90%程序員面試會遇到的索引優化問題

熱門標簽:怎么去開發一個電銷機器人 小程序智能電話機器人 南昌呼叫中心外呼系統哪家好 簡單的智能語音電銷機器人 泗洪正規電話機器人找哪家 怎么申請400熱線電話 湖南保險智能外呼系統產品介紹 河北便宜電銷機器人軟件 ai電話電話機器人

前言

本文給大家分享了90%程序員面試都用得上的索引優化,重點提一下,索引基本原理和創建索引的原則是重點,面試基本必問!大家可以收藏好多理解理解。下面來一起看看詳細的介紹吧。

關于索引,分為以下幾點來講解(技術文):

  • 索引的概述(什么是索引,索引的優缺點)
  • 索引的基本使用(創建索引)
  • 索引的基本原理(面試重點)
  • 索引的數據結構(B樹,hash)
  • 創建索引的原則(重中之重,面試必問!敬請收藏!)
  • 百萬級別或以上的數據如何刪除

一、索引的概述

1)什么是索引?

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表里所有記錄的引用指針。更通俗的說,索引就相當于目錄。當你在用新華字典時,幫你把目錄撕掉了,你查詢某個字開頭的成語只能從第一頁翻到第一千頁。累!把目錄還給你,則能快速定位!

2)索引的優缺點:

可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。,且通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。但是,索引也是有缺點的:索引需要額外的維護成本;因為索引文件是單獨存在的文件,對數據的增加,修改,刪除,都會產生額外的對索引文件的操作,這些操作需要消耗額外的IO,會降低增/改/刪的執行效率。

二、索引的基本使用(真技術文)

1)創建索引:(三種方式)

第一種方式:


第二種方式:使用ALTER TABLE命令去增加索引:

ALTER TABLE用來創建普通索引、UNIQUE索引或PRIMARY KEY索引。


其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。

索引名index_name可自己命名,缺省時,MySQL將根據第一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時創建多個索引。

第三種方式:使用CREATE INDEX命令創建

CREATE INDEX可對表增加普通索引或UNIQUE索引。(但是,不能創建PRIMARY KEY索引)


三、索引的基本原理(不想像別的文章那樣一大堆篇幅廢話)

索引用來快速地尋找那些具有特定值的記錄。如果沒有索引,一般來說執行查詢時遍歷整張表。

索引的原理很簡單,就是把無序的數據變成有序的查詢

      1、把創建了索引的列的內容進行排序

      2、對排序結果生成倒排表

      3、在倒排表內容上拼上數據地址鏈

      4、在查詢的時候,先拿到倒排表內容,再取出數據地址鏈,從而拿到具體數據

四、索引的數據結構(b樹,hash)

1)B樹索引

mysql通過存儲引擎取數據,基本上90%的人用的就是InnoDB了,按照實現方式分,InnoDB的索引類型目前只有兩種:BTREE(B樹)索引和HASH索引。B樹索引是Mysql數據庫中使用最頻繁的索引類型,基本所有存儲引擎都支持BTree索引。通常我們說的索引不出意外指的就是(B樹)索引(實際是用B+樹實現的,因為在查看表索引時,mysql一律打印BTREE,所以簡稱為B樹索引)


查詢方式:

主鍵索引區:PI(關聯保存的時數據的地址)按主鍵查詢,

普通索引區:si(關聯的id的地址,然后再到達上面的地址)。所以按主鍵查詢,速度最快

B+tree性質:

1.)n棵子tree的節點包含n個關鍵字,不用來保存數據而是保存數據的索引。

2.)所有的葉子結點中包含了全部關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。

3.)所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。

4.)B+ 樹中,數據對象的插入和刪除僅在葉節點上進行。

5.)B+樹有2個頭指針,一個是樹的根節點,一個是最小關鍵碼的葉節點。

2)哈希索引(好技術文)

簡要說下,類似于數據結構中簡單實現的HASH表(散列表)一樣,當我們在mysql中用哈希索引時,主要就是通過Hash算法(常見的Hash算法有直接定址法、平方取中法、折疊法、除數取余法、隨機數法),將數據庫字段數據轉換成定長的Hash值,與這條數據的行指針一并存入Hash表的對應位置;如果發生Hash碰撞(兩個不同關鍵字的Hash值相同),則在對應Hash鍵下以鏈表形式存儲。當然這只是簡略模擬圖。


ps:關于數據結構,有興趣深入的朋友可以關注我后查看【數據結構】專題,這里不做詳細講解。

五、創建索引的原則(重中之重)

索引雖好,但也不是無限制的使用,最好符合一下幾個原則

1) 最左前綴匹配原則,組合索引非常重要的原則,mysql會一直向右匹配直到遇到范圍查詢(>、、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

2)較頻繁作為查詢條件的字段才去創建索引

3)更新頻繁字段不適合創建索引

4)若是不能有效區分數據的列不適合做索引列(如性別,男女未知,最多也就三種,區分度實在太低)

5)盡量的擴展索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那么只需要修改原來的索引即可。

6)定義有外鍵的數據列一定要建立索引。

7)對于那些查詢中很少涉及的列,重復值比較多的列不要建立索引。

8)對于定義為text、image和bit的數據類型的列不要建立索引。

百萬級別或以上的數據如何刪除(真好技術文)

關于索引:由于索引需要額外的維護成本,因為索引文件是單獨存在的文件,所以當我們對數據的增加,修改,刪除,都會產生額外的對索引文件的操作,這些操作需要消耗額外的IO,會降低增/改/刪的執行效率。所以,在我們刪除數據庫百萬級別數據的時候,查詢MySQL官方手冊得知刪除數據的速度和創建的索引數量是成正比的。

  • 所以我們想要刪除百萬數據的時候可以先刪除索引(此時大概耗時三分多鐘)
  • 然后刪除其中無用數據(此過程需要不到兩分鐘)
  • 刪除完成后重新創建索引(此時數據較少了)創建索引也非常快,約十分鐘左右。
  • 與之前的直接刪除絕對是要快速很多,更別說萬一刪除中斷,一切刪除會回滾。那更是坑了。

常用的數據庫索引優化語句

使用如下的表tb_test作為示例進行說明:

create table tb_test
(
id int not null,
age int not null, 
name varchar(30) not null,
addr varchar(50) not null
);
create unique index idx1_tb_test on tb_test(id);
create index idx2_tb_test on tb_test(name);
create index idx3_tb_test on tb_test(addr);

索引優化建議

1.對索引列進行計算

例如,我們想要將表tb_test中id大于100的數據記錄中的age和name查找出來。

正確的SQL語句是:

select age,name from tb_test where id > 1*100;

不建議采用的SQL語句是:

select age,name from tb_test where id/100 > 1;

2.對索引列進行拼接

例如,我們想要將表tb_test中name為“zhou”、addr為“CQ”的記錄中的id和age查找出來。

正確的SQL語句是:

select id,age from tb_test where name='zhou' and addr='CQ';

不建議采用的SQL語句是:

select id,age from tb_test where concat(name,' ‘,addr) = ‘zhou CQ';

3.在索引列上is null或is not null的使用

例如,我們想要將表tb_test中id大于等于“0”的記錄中的age查找出來。

正確的SQL語句是:

select age from tb_test where id >= 0;

不建議采用的SQL語句是:

select age from tb_test where id is not null;

4.在索引列上or的使用

例如,我們想要將表tb_test中id等于101或102的記錄中的age和name查找出來。

正確的SQL語句(使用union)是:

select age,name from tb_test where id = 101 union select age,name from tb_test where id = 102;

不建議采用的SQL語句(使用or)是:

select age,name from tb_test where id = 101 or id = 102;

5.盡可能避免索引列在like的首字符使用通配符

例如,我們想要將表tb_test中name匹配“zho”的記錄中的id和age查找出來。

正確的SQL語句是:

select id,age from tb_test where name like ‘zho%';

不建議采用的SQL語句是:

select id,age from tb_test where name like ‘%ho%';

6.復合索引的使用

如果我們建立的索引是復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引。

例如,我們在表tb_test上新建了如下索引:

create index idx4_tb_test on tb_test(id,name,addr);

以上索引idx4_tb_test相當于建立了index(id)、index(id,name)、index(id,name,addr) 這3個索引。在SQL語句的where條件中單獨使用name或addr時不會使用到該索引,必須使用id時才會使用到該索引。

在我們編寫的SQL語句中,不正確地使用索引列可能會導致索引不被使用,而進行全表掃描,極大地降低了數據庫的性能。因此,學習正確的索引的使用方法實在是很有必要的。

今天,索引的講解就到這里,重點提一下,索引基本原理和創建索引的原則是重點,面試基本必問!大家可以收藏好多理解理解。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL 索引分析和優化
  • mysql性能優化之索引優化
  • SQL優化基礎 使用索引(一個小例子)
  • MySQL索引背后的之使用策略及優化(高性能索引策略)
  • Mysql limit 優化,百萬至千萬級快速分頁 復合索引的引用并應用于輕量級框架
  • MySQL 聯合索引與Where子句的優化 提高數據庫運行效率
  • MySQL中索引優化distinct語句及distinct的多字段操作
  • Mysql使用索引實現查詢優化
  • MySQL Order By索引優化方法
  • 搜索引擎優化《SEO教程2007版》下載

標簽:荊門 柳州 瀘州 景德鎮 那曲 威海 江蘇 淮安

巨人網絡通訊聲明:本文標題《90%程序員面試會遇到的索引優化問題》,本文關鍵詞  90%,程序員,面試,會,遇到,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《90%程序員面試會遇到的索引優化問題》相關的同類信息!
  • 本頁收集關于90%程序員面試會遇到的索引優化問題的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    视频一区国产视频| 人妻丰满熟妇aⅴ无码| 天堂av网手机版| 日韩欧美国产精品一区| 天天综合日日夜夜精品| caopor在线| 欧美肥妇bbw| 香蕉加勒比综合久久| 91看片淫黄大片一级在线观看| 国产精品免费人成网站酒店| 日本一区二区三区电影| 国产精品中文字幕欧美| 久久一级免费视频| 中文字幕乱码久久午夜不卡| 国产经典欧美精品| 婷婷伊人五月天| 亚洲欧洲国产专区| 99久久免费国产| 欧美四级电影在线观看| 亚洲一线二线三线久久久| 伊人av在线播放| 337p亚洲精品色噜噜噜| 日韩精品一区第一页| 日本xxx在线播放| 久久综合给合久久狠狠狠97色69| 久久99精品久久久久久久久久久久| 国产交换配乱淫视频免费| 26uuu成人网一区二区三区| 国产一区久久久| 日本精品人妻无码77777| 日韩美女久久久| 人妻巨大乳一二三区| 欧美久久久影院| 极品少妇一区二区三区精品视频| 男人天堂资源网| 亚洲欧美偷拍三级| 国产精品熟妇一区二区三区四区 | 色综合欧美在线| 又紧又大又爽精品一区二区| 日韩精品国产一区| 精品欧美一区二区在线观看| 国产伦精品一区二区三区免费迷| 永久免费看黄网站| 亚洲福利一二三区| av永久免费观看| 1区2区3区欧美| 日韩综合第一页| 久久久久久久久岛国免费| 成人深夜福利app| 欧美久久一二区| 国产呦精品一区二区三区网站| 丝袜 亚洲 另类 欧美 重口| 亚洲午夜激情av| 日本污视频网站| 一区二区欧美在线观看| a级片在线观看| 亚洲人被黑人高潮完整版| 欧美一级片黄色| 亚洲国产高清在线观看视频| 国产男女无遮挡猛进猛出| 久久综合色一综合色88| 99热在这里有精品免费| 日韩一级免费观看| 99免费精品在线| 精品久久久久久久久久久久久久久久久 | 99国产精品久久久久| 欧美电视剧在线观看完整版| 成人综合在线网站| 欧美成人高清电影在线| 成人福利视频在线看| 日韩一级在线观看| 91网上在线视频| 久久久噜噜噜久噜久久综合| 日本女人性视频| 国产欧美一区二区精品秋霞影院| 国产伦精品一区二区免费| 国产精品毛片久久久久久| 少妇特黄一区二区三区| 亚洲视频狠狠干| 九九热久久免费视频| 亚洲国产欧美日韩另类综合| 91久久久久久久久久久久久久| 午夜亚洲福利老司机| 成人免费黄色小视频| 麻豆专区一区二区三区四区五区| 欧美日韩亚洲国产综合| 国产精品系列在线播放| 日韩丝袜情趣美女图片| 日本少妇激三级做爰在线| 国产欧美一区二区精品忘忧草 | 精品少妇一区二区三区在线播放 | 日本一区二区三区dvd视频在线| 韩国无码一区二区三区精品| 亚洲精品午夜久久久| 任你操精品视频| 久久 天天综合| 欧美一区二区三区免费大片 | 成人av电影在线播放| 久久伊99综合婷婷久久伊| 永久免费未满蜜桃| 亚洲另类中文字| 高h视频免费观看| 国产精品影视天天线| 精品国产一区二区三区久久久蜜月| 激情av中文字幕| 亚洲免费大片在线观看| 三级影片在线看| 国产成人超碰人人澡人人澡| 精品国产乱码久久久久久影片| 亚洲精品第二页| 亚洲自拍另类综合| 欧美在线小视频| 99re成人在线| 亚洲欧美日韩系列| 一本久久精品一区二区| 丁香亚洲综合激情啪啪综合| 久久精品一区二区三区不卡| jizz中文字幕| 久久超级碰视频| 欧美精品一区视频| 亚洲色成人网站www永久四虎| 青青草97国产精品免费观看无弹窗版| 在线不卡欧美精品一区二区三区| 国内自拍偷拍视频| 亚洲永久免费av| 欧美日韩久久一区| 少妇献身老头系列| 亚洲高清视频在线| 欧美一二三区在线| 日本xxx在线播放| 久久99国产精品久久99果冻传媒| 欧美精品一区男女天堂| 亚洲色图日韩精品| 高清国产午夜精品久久久久久| 国产精品视频第一区| 污软件在线观看| 99精品黄色片免费大全| 亚洲精选在线视频| 欧美日韩成人在线| 182在线视频| 久久国产婷婷国产香蕉| 国产日韩精品一区二区三区 | 国产精品国产a级| 国产a免费视频| 免费国偷自产拍精品视频| 亚洲丰满少妇videoshd| 欧美一区二区二区| 51妺嘿嘿午夜福利| 国产福利一区二区三区| 136国产福利精品导航| 欧美图区在线视频| 超碰97在线资源站| 国精品**一区二区三区在线蜜桃| 欧美极品少妇xxxxⅹ高跟鞋 | 色综合av在线| 亚洲黄色小说在线观看| 男人的j进女人的j一区| 久久久久97国产精华液好用吗| 中日韩一级黄色片| 丰满饥渴老女人hd| 日本sm残虐另类| 国产色综合一区| 欧美性大战久久久| 999精品免费视频| 国产一区二区伦理片| 亚洲三级电影网站| 欧美一级二级在线观看| 青青青视频在线播放| 精品人妻一区二区三区免费| 青椒成人免费视频| 中文字幕在线观看不卡视频| 欧美日韩亚洲综合在线 | ass精品国模裸体欣赏pics| 国产精品一区二区视频| 一区二区三区四区视频精品免费 | 少妇高潮一区二区三区喷水| 91麻豆福利精品推荐| 蜜臀久久99精品久久久画质超高清| 亚洲国产高清在线| 9191精品国产综合久久久久久| 亚洲精品成人av久久| 91亚洲国产成人精品一区二三| 日韩国产精品91| 国产精品国产三级国产aⅴ无密码| 91麻豆精品国产91久久久久| 91狠狠综合久久久久久| 成人一区二区三区仙踪林| 国产综合一区二区| 亚洲国产一区在线观看| 国产亚洲女人久久久久毛片| 欧美丝袜自拍制服另类| 中文字幕第69页| 国产精品久久久久久久无码| 丁香啪啪综合成人亚洲小说| 日韩av电影免费观看高清完整版在线观看 | 欧美色综合影院| 青青草自拍偷拍| 国产黑丝在线观看| 成人黄色综合网站| 麻豆成人久久精品二区三区红|