国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SQL應知應會】索引(一)? MySQL版

這篇具有很好參考價值的文章主要介紹了【SQL應知應會】索引(一)? MySQL版。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流

本文收錄于SQL應知應會專欄,本專欄主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

前言

?今天開始SQL的索引的篇章,同樣我們會講到MySQL和Oracle的索引,大家拭目以待吧
??今天這篇主要簡單介紹了索引的概念和優(yōu)缺點,同時直接進入主題——如何創(chuàng)建索引,同時我們會針對索引進行一些分類,而今天講的是按照邏輯分類后的普通索引(單列索引)以及復合索引,分別講了索引的創(chuàng)建和應用
??文章中提供了代碼和很具體的截圖,希望大家跟著一起學起來
希望文章的內容對大家有所幫助,如果有什么不足的地方,大家可以在評論區(qū)或者私信我,感謝大家的支持
??那么,快拿出你的電腦,跟著文章一起學習起來吧

一、索引

1.簡介

  • 索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。

1.1 索引的優(yōu)點

  • 索引大大減小了服務器需要掃描的數據量,從而大大加快數據的檢索速度,這也是創(chuàng)建索引的最主要的原因。

  • 索引可以幫助服務器避免排序和創(chuàng)建臨時表

  • 索引可以將隨機IO變成順序IO

  • 索引對于InnoDB(對索引支持行級鎖)非常重要,因為它可以讓查詢鎖更少的元組,提高了表訪問并發(fā)性

  • 關于InnoDB、索引和鎖:InnoDB在二級索引上使用共享鎖(讀鎖),但訪問主鍵索引需要排他鎖(寫鎖)

  • 通過創(chuàng)建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

  • 可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

  • 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

  • 通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

1.2 索引的缺點

  • 創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加

  • 索引需要占物理空間,除了數據表占用數據空間之外,每一個索引還要占用一定的物理空間,如果需要建立聚簇索引,那么需要占用的空間會更大

  • 對表中的數據進行增、刪、改的時候,索引也要動態(tài)的維護,這就降低了整數的維護速度

  • 如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。

  • 對于非常小的表,大部分情況下簡單的全表掃描更高效

2. 索引類型之邏輯分類

2.1普通索引(單列索引) 的創(chuàng)建

  • 單列索引是最基本的索引,沒有任何的限制

  • 方法1:直接創(chuàng)建索引

CREATE INDEX index_name ON table_name(col_name);
  • 方法2:修改表結構的方式添加索引
ALTER TABLE table_name ADD INDEX index_name(col_name);
  • 方法3:創(chuàng)建表的時候同時創(chuàng)建索引
CREATE TABLE news (
    id int(11) NOT NULL AUTO_INCREMENT ,
    title varchar(255)  NOT NULL ,
    content varchar(255)  NULL ,
    time varchar(20) NULL DEFAULT NULL ,
    PRIMARY KEY (id),  -- 默認使用B樹索引
    INDEX index_name (title(255)) -- 默認使用B樹索引
)

2.2普通索引(單列索引) 的查看

  • 可以通過show create table news 查看
CREATE TABLE `news` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` varchar(255) DEFAULT NULL,
  `time` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_name` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
  • 也可以通過轉儲SQL文件進行查看

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for news
-- ----------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `index_name`(`title`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.3 復合索引(組合索引)的創(chuàng)建

  • 復合索引是在多個字段上創(chuàng)建的索引
  • 復合索引遵守**“最左前綴”原則**,即在查詢條件中使用了復合索引的第一個字段,索引才會被使用。因此,在復合索引中索引列的順序至關重要。
  • 方法1:創(chuàng)建一個復合索引
create index index_name on table_name(col_name1,col_name2,...);
  • 方法2:按照修改表結構的方式添加索引
alter table table_name add index index_name(col_name,col_name2,...);
  • 方法3:直接使用工具(此處是Navicat)進行添加
    【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4 復合索引(組合索引)的應用

2.4.1 直接使用select *查詢前面添加索引的表

  • 發(fā)現并沒有使用到索引 ,而是全表掃描
explain
select * from emp

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4.2 查詢具體的字段

  • 使用到前面添加的復合索引,但是還是要掃描整個索引樹
explain
select empno from emp

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4.3 遵循最左前綴原則,對復合索引中的索引字段按照順序進行查詢

  • 我們發(fā)現查詢都使用到了索引
explain
select * from emp where empno = '7499'

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

explain
select * from emp where empno = '7499' and ename = 'ALLEN'

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

explain
select * from emp where empno = '7499' and ename = 'ALLEN' and deptno = '30'

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4.4 遵循最左前綴原則,對復合索引中的索引字段不按照順序進行查詢

  • 發(fā)現使用復合索引的第一個字段,與在SQL語句中的順序無關
explain
select * from emp where ename = 'ALLEN' and deptno = '30' and empno = '7499' 

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4.5 遵循最左前綴原則,對復合索引中的索引字段進行查詢

  • 發(fā)現并沒有使用到索引
explain
select * from emp where ename = 'ALLEN' and deptno = '30'

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

2.4.6 in & not in

  • where in 也會用到索引
explain
select * from emp where empno in (7499,7521)

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

  • not in 沒有in的效率高
explain
select * from emp where empno not in (7499,7521)

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引

小結

??感謝大家耐心的看完這篇文章,這篇文章是MySQL索引的第1篇文章,我們在MySQL方面寫了很多內容了,大家可以去我的專欄SQL應知應會 進行學習,如果大家覺著還算可以,那么就給個三連支持一下吧
??也可以加入我的社區(qū)一起學習呀
?如果想要繼續(xù)關注和學習后續(xù)更多的內容,那就關注一下愛書不愛輸的程序猿吧,當然,如果大家還有什么其他方面的知識點想要看,可以在評論區(qū)或者私信我

【SQL應知應會】索引(一)? MySQL版,SQL應知應會,sql,mysql,數據庫,oracle,大數據,面試,索引文章來源地址http://www.zghlxwxcb.cn/news/detail-636751.html

到了這里,關于【SQL應知應會】索引(一)? MySQL版的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【SQL應知應會】表分區(qū)(五)? MySQL版

    【SQL應知應會】表分區(qū)(五)? MySQL版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月16日
    瀏覽(22)
  • 【SQL應知應會】表分區(qū)(三)? MySQL版

    【SQL應知應會】表分區(qū)(三)? MySQL版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月16日
    瀏覽(24)
  • 【SQL應知應會】表分區(qū)(四)? MySQL版

    【SQL應知應會】表分區(qū)(四)? MySQL版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月17日
    瀏覽(23)
  • 【SQL應知應會】行列轉換(一)? MySQL版

    【SQL應知應會】行列轉換(一)? MySQL版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle 先建一個表 練習 三種插入 修改列類型 1.1為何進行行轉列? 現實中用到的一

    2024年02月12日
    瀏覽(20)
  • 【SQL應知應會】表分區(qū)(二)? MySQL版

    【SQL應知應會】表分區(qū)(二)? MySQL版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月16日
    瀏覽(16)
  • 【SQL應知應會】索引 ? Oracle版:B-樹索引;位圖索引;函數索引;單列與復合索引;分區(qū)索引

    【SQL應知應會】索引 ? Oracle版:B-樹索引;位圖索引;函數索引;單列與復合索引;分區(qū)索引

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文免費學習,自發(fā)文起3天后,會收錄于 SQL應知應會 專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle ?今天繼續(xù) SQL的索引 的第 4 篇文章,主要講

    2024年02月10日
    瀏覽(28)
  • 【SQL應知應會】行列轉換(三)? Oracle版

    【SQL應知應會】行列轉換(三)? Oracle版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月12日
    瀏覽(22)
  • 【SQL應知應會】表分區(qū)(一)? Oracle版

    【SQL應知應會】表分區(qū)(一)? Oracle版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月16日
    瀏覽(21)
  • 【SQL應知應會】表分區(qū)(三)? Oracle版

    【SQL應知應會】表分區(qū)(三)? Oracle版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月14日
    瀏覽(16)
  • 【SQL應知應會】表分區(qū)(四)? Oracle版

    【SQL應知應會】表分區(qū)(四)? Oracle版

    歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享,與更多的人進行學習交流 本文收錄于SQL應知應會專欄, 本專欄 主要用于記錄對于數據庫的一些學習,有基礎也有進階,有MySQL也有Oracle

    2024年02月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包