国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL索引與事務解說

2024-07-24 12:35:56
字體:
來源:轉載
供稿:網友
  MySQL索引與事務詳解
  一、前言
  ​ 上一章我們講解了MySQL的手工編譯安裝流程以及相關的數據庫操作命令(sql語句),本文將要詳細介紹MySQL索引與事務的概念及原理,并初步了解MySQL數據庫視圖概念,簡述數據庫的存儲過程。
 
  二、索引
  2.1索引的概念——什么是索引?
  ​ 一般來說,一篇論文,或者說一本書,都有其目錄,而目錄一般是所有章節的概述,或者說是要點核心,而索引的概念其實也與之類似。
 
  ​ 索引,顧名思義,就是一個方便用戶搜索所需資源的引導,只不過在數據庫中,索引一般被認為是一種特殊的文件,尤其在Linux系統中("一切皆文件")。從專業術語上解釋其含義就是“代表記錄的引用指針”。
 
  2.2索引的作用
  加快查詢速度,提高工作效率;
  降低i/o成本,提供基礎排序;
  加快多表之間的連接;
  支持唯一性索引(下面會介紹什么是唯一性索引),保證數據表中數據的唯一性性;
  2.3索引的分類
  2.3.1普通索引
  ​ 就是一般的索引,只是為了區別于其他特殊索引的一個統稱
 
  2.3.2唯一性索引
  ​ 與普通索引基本類同,區別在于,唯一性索引的列中的所有值都不相同,即“唯一”。
 
  ​ 簡單舉例來說,學生數據表,年齡可以是普通索引,但不可以是唯一性索引,但是詳細住址可以是。
 
  2.3.3主鍵索引
  ​ 本質上也是一種唯一性索引,但必須指定為“primary key”,該索引要求主鍵中的每個值都唯一。上篇文章中,我們提及到了主鍵的概念,其特點也是“非空唯一”。
 
  2.3.4全文索引
  ​ 索引類型為FULLTEXT,全文索引可以在char、vachar或者text類型的列上創建。
 
  2.3.5單列索引與多列索引
  ​ 可以在單列或多列上創建索引。多列索引一般用于區分其中一列可能有相同值的行。
 
  2.4創建索引的原則:建立在表上的(索引依賴于表)
  ​ 索引可以提升數據庫的查詢速度,但并非所有的數據表都需要創建索引。因為索引本身也是需要占用系統資源的,或許一般情況下這個問題不會很突出,因為服務器的資源在一定程度上還是能夠正常支持的,但是如果索引文件過大,其大小可能達到操作系統允許的最大文件限制。
 
  ​ 并且,如果說索引使用不當也會造成數據庫的負擔。因此,數據庫創建索引也是有其原則的。
 
  2.4.1創建索引的原則依據
  表的主鍵、外鍵必須有索引;
  達到一定量的表(300行記錄)應該有索引;
  表之間的連接字段上應該建立索引;
  不能使用唯一性太差的字段作為索引;
  更新頻繁的字段也不適合作為索引;
  小字段適合建立索引,長的字段則不適合建立索引;
  2.5索引的優缺點
  優點:快速查詢所需資源
 
  缺點:占用空間以及資源
 
  2.6創建及查看索引
  首先我們需要保證數據庫中有表,且表內有數據;
 
  mysql> select * from fruit_info;                               
  +----+-------+---------+
  | id | price | newtype |
  +----+-------+---------+
  |  1 |  2.50 | banana  |
  |  2 |  5.50 | apple   |
  |  3 |  6.00 | peach   |
  +----+-------+---------+
  3 rows in set (0.00 sec)
  2.6.1創建普通索引
  命令格式:create index <索引名> on 數據表 (列名);
 
  實例:
 
  mysql> create index id_index on fruit_info(id);
  Query OK, 0 rows affected (0.00 sec)
  Records: 0  Duplicates: 0  Warnings: 0
  mysql> show index from fruit_info;  #查看索引語句也可以將index換成“keys”
  +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
  +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | fruit_info |          1 | id_index |            1 | id          | A         |           3 |     NULL | NULL   |      | BTREE      |         |               |
  +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  1 row in set (0.00 sec)
  其中Non_unique為1,表示不是唯一性索引;Key_name 對應的是索引名稱,這里就是id_index;
 
  2.6.2創建唯一性索引
  命令格式:create unique index <索引名稱> on 數據表 (列名);
 
  實例:
 
  mysql> create unique index type_index on fruit_info(newtype);
  Query OK, 0 rows affected (0.01 sec)
  Records: 0  Duplicates: 0  Warnings: 0
 
  mysql> show index from fruit_info;
  +------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | Table      | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
  +------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | fruit_info |          0 | type_index |            1 | newtype     | A         |           3 |     NULL | NULL   | YES  | BTREE      |         |               |
  | fruit_info |          1 | id_index   |            1 | id          | A         |           3 |     NULL | NULL   |      | BTREE      |         |               |
  +------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  2 rows in set (0.00 sec)
  這里的索引名稱為type_index,與之對應的Non_unique的值為0,表示其為唯一性索引。并且唯一性索引的值都不一樣。
 
  2.6.3創建主鍵索引
  命令格式:(1)創建表的時候創建主鍵:create table 表名 ([ ... ],primary key(列的列表));
 
 ?。?)修改表結構加入主鍵:alter table 表名 add primary key;
 
  實例:
 
  mysql> create table student (id int not null,sex char(2),age int not null,hobby varchar(20),primary key(id,hobby));
  Query OK, 0 rows affected (0.01 sec)
 
  mysql> show index from student;
  +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
  +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  | student |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
  | student |          0 | PRIMARY  |            2 | hobby       | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
  +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
  2 rows in set (0.01 sec)
  一個表里面只能有一個主鍵,但一個主鍵可以由多個字段組成。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盘锦市| 竹北市| 驻马店市| 循化| 海安县| 平度市| 通山县| 宝清县| 望谟县| 喀喇沁旗| 哈密市| 商南县| 固阳县| 岳阳县| 唐山市| 海伦市| 浮山县| 长子县| 沁源县| 陆川县| 邹城市| 徐州市| 东乡族自治县| 通州区| 习水县| 敖汉旗| 沅江市| 朝阳市| 耿马| 高唐县| 巧家县| 新竹市| 古交市| 永嘉县| 长沙市| 滁州市| 谷城县| 溧阳市| 宁阳县| 陆河县| 昔阳县|