mysql數據庫表索引例子(mysql表創建索引)

本文目錄一覽:

mysql索引

在mysql中,索引是一種特殊的數據庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢數據表中有某一特定值的記錄。

通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列即可。

通過索引,查詢數據時不用讀完記錄的所有信息,而只是查詢索引列。否則,數據庫系統將讀取每條記錄的所有信息進行匹配。

可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節省時間。

因此,使用索引可以很大程度上提高數據庫的查詢速度,還有效的提高了數據庫系統的性能。

索引的優缺點

索引有其明顯的優勢,也有其不可避免的缺點。

優點

索引的優點如下:

1、通過創建唯一索引可以保證數據庫表中每一行數據的唯一性。

2、可以給所有的 MySQL 列類型設置索引。

3、可以大大加快數據的查詢速度,這是使用索引最主要的原因。

4、在實現數據的參考完整性方面可以加速表與表之間的連接。

5、在使用分組和排序子句進行數據查詢時也可以顯著減少查詢中分組和排序的時間

缺點

增加索引也有許多不利的方面,主要如下:

1、創建和維護索引組要耗費時間,並且隨着數據量的增加所耗費的時間也會增加。

2、索引需要佔磁盤空間,除了數據表占數據空間以外,每一個索引還要佔一定的物理空間。如果有大量的索引,索引文件可能比數據文件更快達到最大文件尺寸。

3、當對表中的數據進行增加、刪除和修改的時候,索引也要動態維護,這樣就降低了數據的維護速度。

使用索引時,需要綜合考慮索引的優點和缺點。

mysql如何建立索引

我們可以通過查看索引的屬性來判斷創建索引的方法。

查看索引的語法格式如下:

SHOW INDEX FROM 表名 [ FROM 數據庫名]

語法說明如下:

表名:指定需要查看索引的數據表名。

數據庫名:指定需要查看索引的數據表所在的數據庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 數據庫中 student 數據表的索引。

示例

使用 SHOW INDEX 語句查看《MySQL創建索引》一節中 tb_stu_info2 數據表的索引信息,SQL 語句和運行結果如下所示。

mysql SHOW INDEX FROM tb_stu_info2\G

1. row

Table: tb_stu_info2

Non_unique: 0

Key_name: height

Seq_in_index: 1

Column_name: height

Collation: A

Cardinality: 0

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

1 row in set (0.03 sec)

其中各主要參數說明如下:

參數 說明

Table 表示創建索引的數據表名,這裡是 tb_stu_info2 數據表。

Non_unique 表示該索引是否是唯一索引。若不是唯一索引,則該列的值為 1;若是唯一索引,則該列的值為 0。

Key_name 表示索引的名稱。

Seq_in_index 表示該列在索引中的位置,如果索引是單列的,則該列的值為 1;如果索引是組合索引,則該列的值為每列在索引定義中的順序。

Column_name 表示定義索引的列字段。

Collation 表示列以何種順序存儲在索引中。在 MySQL 中,升序顯示值“A”(升序),若顯示為 NULL,則表示無分類。

Cardinality 索引中唯一值數目的估計值。基數根據被存儲為整數的統計數據計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL 使用該索引的機會就越大。

Sub_part 表示列中被編入索引的字符的數量。若列只是部分被編入索引,則該列的值為被編入索引的字符的數目;若整列被編入索引,則該列的值為 NULL。

Packed 指示關鍵字如何被壓縮。若沒有被壓縮,值為 NULL。

Null 用於顯示索引列中是否包含 NULL。若列含有 NULL,該列的值為 YES。若沒有,則該列的值為 NO。

Index_type 顯示索引使用的類型和方法(BTREE、FULLTEXT、HASH、RTREE)。

Comment 顯示評註。

Mysql-多表查詢as索引

方法

(1) 根據需求找到關聯表

(2)找到關聯條件

重點的表tables

* 需求1:統計world庫下有幾個表

需求2:統計所有庫下表的個數

需求3:統計每個庫的總數據大小

–單表占空間:AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH

什麼使索引:索引其實就是一種算法

BTree

HASH

Rtree

Fulltext

輔助索引

輔助索引只提取索引列作為葉子節點

聚集索引

聚集索引提取整行數據作為葉子節點

1、輔助索引和聚集索引最大的區別就在於葉子節點,枝節點和根節點原理相同

2、輔助索引會記錄主鍵值,一般情況(除等值查詢),最終都會通過聚集索引(主鍵)來找到需要的數據

第二種

一般經常用來查詢的列作為索引

索引可以有多個,但是索引名不可重名

第一種:單列索引

第二種:前綴索引

前綴索引只能應用到字符串列,數字列不能用前綴索引

聯合索引說明:如果在一個表內對A、B、C三個列創建聯合索引那麼創建索引將按照如下情況創建索引表:

A

AB

ABC

======================================================

(1)查詢列無索引

(2)語句不符合走走索引條件

(3)需要查看全表

即把有索引的列全便利一遍

、 、 =、 =、 like、 between and 在範圍掃描中,這些會受到B+tree索引葉子節點上額外的優化,因為這些是連續取值的

or、in 這兩個不是連續的取值,所以不能受到B+tree索引的額外優化,使用時相當於Btree索引

!=、 not in 只有在主鍵列才走索引也是range級別

(1)、 、 =、 =、 like、 between and

(2)or、in

(3)!=、 not in

多表連接查詢,非驅動表連接條件是主鍵或唯一鍵

一般多表查詢的時,最左側的表為驅動表,右側的為非驅動表,下邊的例子中country標為非驅動表

7.1.1 數字類型

7.1.2 字符串類型:

字符集

中文

gbk 2字節

utf8 3字節

utf8mb4 4字節

utf8mb4 為例:

舉例(1)聯合索引等值查詢

舉例(2) 聯合索引中有不等值查詢

如果Extra列出現Using temporary、Using filesort,兩項內容,那麼考慮以下語句的問題。

group by

order by

distinct

join on

union

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/232483.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 12:52
下一篇 2024-12-11 12:52

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字符串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • 如何將Oracle索引變成另一個表?

    如果你需要將一個Oracle索引導入到另一個表中,可以按照以下步驟來完成這個過程。 一、創建目標表 首先,需要在數據庫中創建一個新的表格,用來存放索引數據。可以通過以下代碼創建一個…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • 索引abc,bc會走索引嗎

    答案是:取決於MySQL版本和表結構 一、MySQL版本的影響 在MySQL 5.6之前的版本中,MySQL會同時使用abc和bc索引。但在MySQL 5.6及之後的版本中,MyS…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python切片索引越界是否會報錯

    解答:當對一個字符串、列表、元組進行切片時,如果索引越界會返回空序列,不會報錯。 一、切片索引的概念 切片是指對序列進行操作,從其中一段截取一個新序列。序列可以是字符串、列表、元組…

    編程 2025-04-29

發表回復

登錄後才能評論