資料庫索引

2021-10-10 09:26:21 字數 3485 閱讀 2465

索引操作:

​ 概述:

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。

注意 :

通常我們只在經常進行查詢操作的字段上建立索引

對於資料量很少的表或者經常進行寫操作而不是查詢操作的表不適合建立索引

索引分類:

普通索引 :字段值無約束,key標誌為 mul

唯一索引(unique) :字段值不允許重複,但可為 null,key標誌為 uni

乙個表中只能有乙個主鍵字段, 主鍵欄位不允許重複,且不能為null,key標誌為pri。通常設定記錄編號欄位id,能唯一鎖定一條記錄

索引建立:

create table 表名(

欄位名 資料型別,

欄位名 資料型別,

index 索引名(欄位名),

index 索引名(欄位名),

unique 索引名(欄位名)

);

create [unique] index 索引名 on 表名(欄位名);

e.g.

create unique index name_index on cls(name);

alter table 表名 add primary key(id);
1、desc 表名;  --> key標誌為:mul 、uni。

2、show index from 表名;

drop index 索引名 on 表名;

alter table 表名 drop primary key; # 刪除主鍵

set  profiling = 1; 開啟功能 (專案上線一般不開啟)

show profiles 檢視語句執行資訊

外來鍵約束和表關聯關係:

​ 外來鍵約束:

# 建立部門表

create table dept (id int primary key auto_increment,dname varchar(50) not null);

# 建立人員表

create table person (

id int primary key auto_increment,

name varchar(32) not null,

age tinyint default 0,

*** enum('m','w','o') default 'o',

salary decimal(8,2) default 250.00,

hire_date date not null,

dept_id int

) ;

上面兩個表中每個人員都應該有指定的部門,但是實際上在沒有約束的情況下人員是可以沒有部門的或者也可以新增乙個不存在的部門,這顯然是不合理的。

cascade :資料級聯更新 on delete cascade on update cascade

set null : on delete set null on update set null

表關聯設計:

當我們應對複雜的資料關係的時候,資料表的設計就顯得尤為重要,認識資料之間的依賴關係是更加合理建立資料表關聯性的前提。常見的資料關係如下:

一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然。

舉例 : 學生資訊和學籍檔案,乙個學生對應乙個檔案,乙個檔案也只屬於乙個學生

create table student(id int primary key auto_increment,name varchar(50) not null);

create table record(id int primary key auto_increment,

comment text not null,

st_id int unique,

constraint st_fk foreign key(st_id) references student(id)

on delete cascade

on update cascade

);

一張表中有一條記錄可以對應另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄 只能對應第一張表的一條記錄,這種關係就是一對多或多對一

舉例: 乙個人可以擁有多輛汽車,每輛車登記的車主只有一人。

create table person(

id varchar(32) primary key,

name varchar(30),

*** char(1),

age int

);create table car(

id varchar(32) primary key,

name varchar(30),

price decimal(10,2),

pid varchar(32),

constraint car_fk foreign key(pid) references person(id)

);

一對表中(a)的一條記錄能夠對應另外一張表(b)中的多條記錄;同時b表中的一條記錄 也能對應a表中的多條記錄

舉例:乙個運動員可以報多個專案,每個專案也會有多個運動員參加,這時為了表達多對多關係需要單獨建立關係表。

create table athlete (

id int primary key auto_increment,

name varchar(30),

age tinyint not null,

country varchar(30) not null,

description varchar(30)

);create table item (

id int primary key auto_increment,

rname varchar(30) not null

);create table athlete_item (

id int primary key auto_increment,

aid int not null,

tid int not null,

constraint athlete_fk foreign key (aid) references athlete (id),

constraint item_fk foreign key (tid) references item (id)

);

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...