中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

搜索網站怎么做東營優(yōu)化路網

搜索網站怎么做,東營優(yōu)化路網,python做視頻點播網站,健身房網站建設案例目錄 一、索引的概述 1、索引的概念 2、索引的作用 3、索引的副作用 4、創(chuàng)建索引的原則依據 5、索引優(yōu)化 6、索引的分類 7、數據文件與索引文件 二、管理數據庫索引 1、查詢索引 2、創(chuàng)建索引 2.1 創(chuàng)建普通索引 2.2 創(chuàng)建唯一索引 2.3 創(chuàng)建主鍵索引 2.4 創(chuàng)建組合…

目錄

一、索引的概述

1、索引的概念

2、索引的作用?

3、索引的副作用

4、創(chuàng)建索引的原則依據

5、索引優(yōu)化

6、索引的分類

7、數據文件與索引文件

二、管理數據庫索引

1、查詢索引

2、創(chuàng)建索引

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

2.2 創(chuàng)建唯一索引

2.3 創(chuàng)建主鍵索引

2.4 創(chuàng)建組合索引

2.5 創(chuàng)建全文索引

3、刪除索引

3.1 直接刪除索引

3.2 修改表格式方式刪除索引

3.3 刪除主鍵索引

三、總結

1、索引類型

2、索引創(chuàng)建的三大方法


一、索引的概述

1、索引的概念

  • 索引是一個排序的列表,在這個列表中存儲著索引的值和包含這個值的數據所在行的物理地址(類似于C語言的鏈表通過指針指向數據記錄的內存地址)
  • 使用索引后可以不用掃描全表來定位某行的數據,而是先通過索引表找到該行數據對應的物理地址然后訪問相應的數據,因此能加快數據庫的查詢速度
  • 索引就好比是一本書的目錄,可以根據目錄中的頁碼快速找到所需的內容
  • 索引是表中一列或者若干列值排序的方法
  • 建立索引的目的是加快對表中記錄的查找或排序

2、索引的作用?

  • 加快數據檢索速度:通過索引,數據庫系統可以更快地定位到需要的數據,而不必掃描整個表能夠大大加快查詢速率。當表很大或查詢涉及到多個表時,可以成干上萬倍地提高查詢速度
  • 加速數據排序:索引可以幫助數據庫系統快速排序數據,例如在ORDER BY子句中使用索引可以提高排序的效率
  • 優(yōu)化連接操作:對連接操作進行優(yōu)化,特別是在多表連接時,索引可以顯著提升查詢性能
  • 約束唯一性:可以使用索引來確保某些列或列組的數值在表中是唯一的,這種約束可以通過UNIQUE索引或主鍵索引來實現
  • 降低數據庫的IO成本:當沒有索引可用時,數據庫可能需要進行全表掃描以找到匹配的數據。而有了索引,數據庫可以避免或減少全表掃描的情況,大大減少了IO操作的次數和數據量

?3、索引的副作用

  • 占用存儲空間:索引需要額外的存儲空間。對于大型表來說,索引可能會占據相當可觀的存儲空間

  • 降低寫操作性能:當進行插入、更新和刪除等寫操作時,索引也需要進行維護,這可能導致寫操作的性能下降。特別是對于頻繁更新的列,索引維護成本較高

  • 增加維護成本:隨著數據的變化,索引的效率也會發(fā)生變化。因此,需要定期對索引進行優(yōu)化和重建,這增加了維護成本

  • 過多索引影響性能:如果表上存在過多或不必要的索引,會增加查詢優(yōu)化器的選擇路徑,可能導致性能下降

  • 可能引起鎖問題:在某些情況下,索引可能會引發(fā)鎖問題,尤其是在并發(fā)環(huán)境中,需要謹慎處理索引以避免鎖競爭

  • 統計信息不準確:有時候索引的統計信息可能不準確,導致查詢優(yōu)化器做出不恰當的執(zhí)行計劃,從而影響性能

4、創(chuàng)建索引的原則依據

索引雖可以提升數據庫查詢的速度,但并不是任何情況下都適合創(chuàng)建索引。因為索引本身會消耗系統資源,在有索引的情況下,數據庫會先進行索引查詢,然后定位到具體的數據行,如果索引使用不當,反而會增加數據庫的負擔。

  • 表的主鍵、外鍵必須有索引。因為主鍵具有唯一性,外鍵關聯的是主表的主鍵,查詢時可以快速定位
  • 記錄數超過300行的表應該有索引。如果沒有索引,每次查詢都需要把表遍歷一遍,會嚴重影響數據庫的性能
  • 經常與其他表進行連接的表,在連接字段上應該建立索引
  • 唯一性太差的字段不適合建立索引
  • 更新太頻繁地字段不適合創(chuàng)建索引
  • 經常出現在 where 子句中的字段,特別是大表的字段,應該建立索引
  • 在經常進行 GROUP BY、ORDER BY 的字段上建立索引
  • 索引應該建在選擇性高的字段上
  • 索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引??

5、索引優(yōu)化

  • 經常用于查詢條件的列:對于經常出現在 WHERE 子句中的列,特別是用作連接條件的列,創(chuàng)建索引可以提高查詢性能

  • 頻繁被用來排序的列:如果某些列經常用于排序操作(例如在ORDER BY子句中),為這些列創(chuàng)建索引可以加快排序操作的速度

  • 用作連接條件的列:在多表連接時,連接條件的列應該建立索引,以提高連接操作的效率

  • 唯一性約束列:對于需要唯一性約束的列,如主鍵或UNIQUE約束的列,應當創(chuàng)建唯一索引

  • 頻繁被用于聚合函數的列:如果某些列經常用于聚合函數(如SUM、AVG等),為這些列創(chuàng)建索引可以提高聚合查詢的性能

6、索引的分類

  • B-tree索引:這是最常見的索引類型,適用于各種數據類型。B-tree索引通過對索引列的值進行排序,構建一個類似于樹形結構的索引,從而加快數據的檢索速度

  • 哈希索引:哈希索引基于哈希算法構建,適用于等值查詢,例如使用=或IN操作符的查詢。相比B-tree索引,哈希索引在等值查詢時具有更好的性能,但不支持范圍查詢和排序操作

  • 全文索引:用于全文搜索的場景,例如對文本內容進行搜索。全文索引可以實現對文本內容的關鍵詞搜索,并支持模糊匹配等操作

  • 空間索引:適用于地理空間數據類型,如Point、LineString、Polygon等??臻g索引可以加速地理位置相關的查詢,例如查找某個區(qū)域內的所有點

  • 組合索引:即將多個列組合起來創(chuàng)建的索引,可以同時提高多個列的查詢效率,特別是在涉及多列的查詢條件時

  • 唯一索引:確保索引列的數值在表中是唯一的,通常用于約束某些列或列組的唯一性

  • 主鍵索引:主鍵索引是一種特殊的唯一索引,用于唯一標識表中的每一行數據

以上這些索引類型可以根據不同的場景和需求選擇合適的索引策略,以提高數據庫的查詢性能

7、數據文件與索引文件

MySQL數據庫的數據文件存放在/usr/local/mysql/data目錄下,每個數據庫對應一個子目錄,用于存儲數據表文件。每個數據表對應為三個文件,擴展名分別為“.frm”、“.MYD”和“.MYI”

“.MYD”文件是MyISAM存儲引擎專用,存放MyISAM表的數據。每一個MyISAM表都會有一個“.MYD”文件與之對應,同樣存放于所屬數據庫的文件夾下,和“.frm”文件在一起。

“.MYI”文件也是專屬于 MyISAM 存儲引擎的,主要存放 MyISAM 表的索引相關信息。對于 MyISAM 存儲來說,可以被 cache 的內容主要就是來源于“.MYI”文件中。每一個MyISAM 表對應一個“.MYI”文件,存放于位置和“.frm”以及“.MYD”一樣。

MyISAM 存儲引擎的表在數據庫中,每一個表都被存放為三個以表名命名的物理文件
(frm,myd,myi)。 每個表都有且僅有這樣三個文件做為 MyISAM 存儲類型的表的存儲,也就是說不管這個表有多少個索引,都是存放在同一個“.MYI”文件中。

還有“.ibd”和ibdata文件,這兩種文件都是用來存放 Innodb 數據的,之所以有兩種文件來存放 Innodb 的數據(包括索引),是因為Innodb的數據存儲方式能夠通過配置來決定是使用共享表空間存放存儲數據,還是獨享表空間存放存儲數據。獨享表空間存儲 方式使用“.ibd”文件來存放數據,且每個表一個“.ibd”文件,文件存放在和 MyISAM 數據相同的位置。如果選用共享存儲表空間來存放數據,則會使用 ibdata 文件來存放,所有表共同使用一個(或者多個,可自行配置)ibdata 文件

二、管理數據庫索引

1、查詢索引

方法一:show create table 表名;方法二:
show index from 表名;
show index from 表名\G;    #豎向顯示表索引信息方法三:
show keys from 表名;
show keys from 表名\G;      #豎向顯示表索引信息

注:各字段含義?

字段含義
Table表的名稱
Non_unique如果索引內容唯一,則為 0;如果可以不唯一,則為 1
Key_name索引的名稱
Seq_in_index索引中的列序號,從 1 開始。 limit 2,3
Column_name列名稱
Collation列以什么方式存儲在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(無分類)
Cardinality索引中唯一值數目的估計值
Sub_part如果列只是被部分地編入索引,則為被編入索引的字符的數目(zhangsan)。如果整列被編入索引,則為 NULL
Packed指示關鍵字如何被壓縮。如果沒有被壓縮,則為 NULL
Null如果列含有 NULL,則含有 YES。如果沒有,則該列含有 NO
Index_type用過的索引方法(BTREE, FULLTEXT, HASH, RTREE)
Comment備注

2、創(chuàng)建索引

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

普通索引也被稱為單列索引,它僅基于單個列的數值進行排序和搜索

方法一:直接創(chuàng)建普通索引

create index 索引名 on 表名 (列名);
create index score_index on dianzi (score);
create index name_index on dianzi (name);

#使用索引實現查詢
select score from dianzi;
select name from dianzi;
#查看索引信息
show create table dianzi;

方法二:修改表結構方式添加普通索引

alter table 表名 add index 索引名 (列名);
alter table dianzi add index index_id (id);

方法三:創(chuàng)建表時添加索引?

create table 表名 (字段1 數據類型,字段2 數據類型,...,index 索引名 (字段));
create table tongxin (id int(10),name varchar(10),cardid varchar(18),phone varchar(11),address varchar(50),remark text,index index_cardid(cardid));

#插入點數據,為普通索引查詢
insert into tongxin values(1,'cxz',13938592221,14892283,'江蘇南京','組長');
insert into tongxin values(2,'shd',29410875347,89422959,'江蘇無錫','成員');
insert into tongxin values(3,'djs',14870235055,50964966,'江蘇徐州','成員');
insert into tongxin values(4,'fhy',2950435883,98503856,'浙江杭州','組長');
insert into tongxin values(5,'tss',22857035003,285973503,'浙江寧波','成員');
insert into tongxin values(6,'xhd',24289592847,284973503,'浙江紹興','成員');

注:

  • 性能影響:雖然索引可以顯著提高查詢速度,但它們也會占用額外的磁盤空間,并可能降低插入、刪除和更新數據的速度,因為數據庫需要同時更新索引
  • 選擇索引列:選擇哪些列作為索引應該基于查詢的需要。頻繁作為查詢條件的列或經常出現在join、whereorder by等子句中的列是創(chuàng)建索引的好候選
  • 索引管理:隨著時間的推移,表結構和查詢模式可能會變化,因此定期審查和調整索引是很重要的,以確保數據庫的性能最優(yōu)化

2.2 創(chuàng)建唯一索引

唯一索引(Unique Index)在MySQL數據庫中是一種確保數據列中每個值都是唯一的索引。通過創(chuàng)建唯一索引,你可以保證某一列或列組合中的數據值不會重復,這對于維護數據的完整性非常重要,如防止同一個電子郵件地址被注冊多次

  • 與普通索引類似,但區(qū)別是唯一索引列的每個值都唯一
  • 唯一索引允許有空值(注意和主鍵不同)
  • 如果是用組合索引創(chuàng)建,則列值的組合必須唯一
  • 添加唯一鍵將自動創(chuàng)建唯一索引

方法一:直接創(chuàng)建唯一索引

create unique index 索引名 on 表名(列名);
create unique index index_name on tongxin (name);

方法二:修改表結構方式添加唯一索引

alter table 表名 add unique 索引名 (列名);
alter table tongxin add unique index_phone (phone);

方法三:創(chuàng)建表時添加唯一索引

create table 表名 (字段1 數據類型,字段2 數據類型,...,unique 索引名 (列名));
create table jisj (id int(3) not null,name varchar(10),cardid char(15),unique index_cardid (cardid));
#插入點數據,方便索引查詢
insert into jisj values(1,'cxz',29857012035);
insert into jisj values(2,'xsf',29857012035);
insert into jisj values(2,'xsf',32894385901);
insert into jisj values(3,'sdh',29496291384);

方法四:創(chuàng)建表時添加唯一鍵,會自動創(chuàng)建唯一索引

create table wulian (id int(3) not null,name varchar(10) unique key,cardid char(15));
#unique key:表此字段唯一鍵約束,此字段數據不可重復,一個表中可有多個唯一鍵

#插入點數據,方便唯一索引查詢
insert into wulian values(1,'cxz',29857012035);
insert into wulian values(2,'xsf',32894385901);
insert into wulian values(3,'sdh',29496291384);

注:

  • 空值處理:唯一索引允許列中存在空值(NULL),但是如果索引是多列的,每列的組合必須是唯一的。對于唯一索引,MySQL視多個NULL值為不同的值,因此允許多個NULL值存在于唯一索引列中
  • 性能影響:雖然唯一索引可以提高查詢性能并保證數據的唯一性,但它也可能增加插入和更新操作的開銷,因為每次這些操作發(fā)生時,MySQL都需要檢查唯一性約束
  • 使用場景:唯一索引非常適合用于需要強制數據唯一性的場景,如用戶注冊郵箱、身份證號碼等

2.3 創(chuàng)建主鍵索引

主鍵索引是一種特殊的唯一索引,不僅確保索引列的數據唯一性,還能標識表中的每一行數據,必須指定為“primary key”。主鍵的特點包括:

  • 每個表只能有一個主鍵
  • 主鍵列不能有NULL值
  • 主鍵自動創(chuàng)建唯一索引,確保列值的唯一性

方法一:創(chuàng)建表時指定主鍵索引

create table 表名 (字段1 數據類型,字段2 數據類型,...,primary key (列名));
create table class (id int(3) not null,name varchar(10) not null,cardid char(11) not null,primary key(id));

#插入數據,方便使用主鍵索引查詢
insert into class values(1,'sjg',9432005023);
insert into class values(2,'sfh',2389420509);
insert into class values(2,'dkg',49848658802);
insert into class values(3,'jkd',32840437588);

方法二:修改表結構方式添加主鍵索引

alter table 表名 add primary key (列名); 
alter table class add primary key (cardid);
alter table wulian add primary key (id);

注:

  • 如果表中已經有數據,給列添加主鍵前需要確保該列的所有值都是唯一的,且沒有NULL值。
  • 考慮到性能和存儲效率,主鍵通常設置為整型或UUID。
  • 主鍵的選擇對數據庫性能有重要影響,應謹慎選擇能唯一標識每行數據的列作為主鍵。

2.4 創(chuàng)建組合索引

組合索引(也稱為復合索引或多列索引)是指基于表中兩個或多個列創(chuàng)建的索引。組合索引可以提高查詢性能,特別是在查詢條件涉及多個列時。它按照索引中列的順序存儲數據,這使得數據庫能夠高效地利用索引來加速查詢和排序操作

需要滿足最左原則,因為select語句的 where條件是依次從左往右執(zhí)行的,所以在使用select 語句查詢時where條件使用的字段順序必須和組合索引中的排序一致,否則索引將不會生效

方法一:創(chuàng)建表時指定組合索引

create table 表名 (列名1 數據類型,列名2 數據類型,列名3 數據類型,……,index 索引名 (列名1,列名2,列名3,……));
create table bak (id int(10),name varchar(10),cardid varchar(18),phone varchar(11),address varchar(50),remark text,index index_bak(name,cardid,address));

#插入點數據,為組合索引查詢
insert into bak values(1,'cxz',13938592221,14892283,'江蘇南京','組長');
insert into bak values(2,'shd',29410875347,89422959,'江蘇無錫','成員');
insert into bak values(3,'djs',14870235055,50964966,'江蘇徐州','成員');

方法二:修改表結構方式添加組合索引

alter table 表名 add index 索引名 (字段1,字段2,字段3,……);
alter table wulian add index index_wulian (id,name);

注:

  • 索引順序:在定義組合索引時,列的順序非常重要。應根據查詢中最常用的列來安排索引中的列順序
  • 性能影響:雖然索引可以提高查詢性能,但過多的索引會增加插入、更新和刪除操作的開銷,因為數據庫需要維護這些索引。因此,應根據實際需要創(chuàng)建索引
  • 前導列優(yōu)化:盡可能利用索引的前導列進行查詢,以充分利用組合索引的優(yōu)勢

2.5 創(chuàng)建全文索引

全文索引通過創(chuàng)建文本數據的索引來加速對文本的搜索查詢,它會分析文本列中的內容,將文本分解成詞元(tokens)或關鍵詞,并建立一個搜索關鍵詞的索引。這樣,當進行文本搜索時,數據庫可以直接利用這個索引來快速定位包含特定關鍵詞的記錄,而不是逐行掃描整個表。

全文索引可以在 CHAR、VARCHAR 或者 TEXT 類型的列上創(chuàng)建。每個表只允許有一個全文索引?

方法一:直接創(chuàng)建全文索引

create fulltext index 索引名 on 表名 (列名);
create fulltext index index_address on tongxin (address);

select * from tongxin where address='浙江杭州';   #全文索引查詢關鍵字“浙江杭州”

方法二:修改表結構方式添加全文索引

alter table 表名 add fulltext 索引名 (列名);
alter table bak add fulltext index_remark (remark);

 select * from bak where remark='組長';   #使用全文索引搜索,其中關鍵字是“組長”

方法三:創(chuàng)建表時指定全文索引

create table 表名 (字段1 數據類型,字段2 數據類型,……,fulltext 索引名 (列名)); 
create table zhizao (id int(10),name varchar(10),cardid varchar(18),phone varchar(11),address varchar(50),remark text,index,fulltext index_address (address));

#插入點數據,為全文索引查詢
insert into zhizao values(1,'cxz',13938592221,14892283,'江蘇南京','組長');
insert into zhizao values(2,'shd',29410875347,89422959,'江蘇無錫','成員');
insert into zhizao values(3,'djs',14870235055,50964966,'江蘇鹽城','成員');
select * from zhizao where address='江蘇南京';

注:

  • 存儲引擎限制:全文索引最初只支持MyISAM存儲引擎。從MySQL 5.6版本開始,InnoDB存儲引擎也支持全文索引
  • 性能考慮:雖然全文索引可以顯著提高文本搜索的速度,但它也會占用額外的磁盤空間,并可能增加文本數據更新操作的開銷
  • 查詢語法:使用全文索引時,可以利用match() ... against()語法進行搜索查詢,這允許執(zhí)行包含布爾文本搜索和自然語言搜索的復雜查詢

3、刪除索引

3.1 直接刪除索引

drop index 索引名 on 表名;
drop index index_address on zhizao;

3.2 修改表格式方式刪除索引

alter table 表名 drop index 索引名;
alter table bak drop index index_bak;
alter table bak drop index index_remark;

3.3 刪除主鍵索引

alter table 表名 drop primary key;
alter table class drop primary key;

三、總結

1、索引類型

索引名稱鍵標識說明一張表索引數量
普通索引key針對所有字段,沒有特殊的需求/規(guī)則可多個
唯一(鍵)索引unique key針對唯一性的字段,僅允許出現一次空值可多個
主鍵索引primary key針對唯一性字段、且不可為空,同時一張表只允許包含一個主鍵索引一個
組合索引key多列/多字段組合形式的索引可多個
全文索引fulltext key(varchar char text)全文搜索內容可多個

2、索引創(chuàng)建的三大方法

①直接創(chuàng)建索引

索引名稱格式
普通索引create index 索引名 on 表名 (列名);
唯一(鍵)索引create unique index 索引名 on 表名(列名);
主鍵索引
組合索引
全文索引create fulltext index 索引名 on 表名 (列名);

②alter修改表結構的時候,進行add添加索引

索引名稱格式
普通索引alter table 表名 add index 索引名 (列名);
唯一(鍵)索引alter table 表名 add unique 索引名 (列名);
主鍵索引alter table 表名 add primary key (列名);?
組合索引alter table 表名 add index 索引名 (字段1,字段2,字段3,……);
全文索引alter table 表名 add fulltext 索引名 (列名);

③在創(chuàng)建表的時候,直接指定創(chuàng)建索引

索引名稱格式
普通索引create table 表名 (字段1 數據類型,字段2 數據類型,...,index 索引名 (字段));
唯一(鍵)索引create table 表名 (字段1 數據類型,字段2 數據類型,...,unique 索引名 (列名));
主鍵索引create table 表名 (字段1 數據類型,字段2 數據類型,...,primary key (列名));
組合索引create table 表名 (列名1 數據類型,列名2 數據類型,列名3 數據類型,……,index 索引名 (列名1,列名2,列名3,……));
全文索引create table 表名 (字段1 數據類型,字段2 數據類型,……,fulltext 索引名 (列名));?
http://www.risenshineclean.com/news/38861.html

相關文章:

  • 安徽平臺網站建設找哪家國產最好的a級suv88814
  • 哈爾濱企業(yè)展示型網站建設搜索引擎優(yōu)化期末考試答案
  • wordpress最簡單的主題濱州seo排名
  • 提高網站流量網絡推廣網站推廣方法
  • 濰坊網站制作 熊掌號今日熱搜榜排名最新
  • 最好的wordpress主題北京網站優(yōu)化方式
  • 網站用自己的電腦做服務器北京百度seo排名點擊軟件
  • 網站建設模板成功案例網絡營銷推廣技術
  • 營銷網站制作seo外貿公司推廣
  • 網站例子友情鏈接作用
  • 外國網站上做雅思考試競價排名深度解析
  • 網站建設的七個流程步驟2345網址大全
  • 如何建做校園購物網站注冊一個網站
  • 做甜品的網站蘇州優(yōu)化收費
  • 網站備案歸哪里管網頁快速收錄
  • 定西市小企業(yè)網站建設建設百度競價怎么做效果好
  • 商城網站制作多少錢58同城如何發(fā)廣告
  • 互聯網大會官網東莞seoseo關鍵詞排名優(yōu)化
  • 電子產品網站開發(fā)背景百度的排名規(guī)則詳解
  • 泰國做彩票網站seo關鍵詞排名怎么提升
  • 淅川做網站關鍵詞指數查詢工具
  • jsp是做網站后臺的嗎樂陵seo外包
  • 國家住房和城鄉(xiāng)建設部網站百度怎么發(fā)帖做推廣
  • 找團隊做網站需要明確哪些東西現在如何進行網上推廣
  • c4d一般要學多久濱州seo招聘
  • 網店代運營公司方案seo查詢愛站
  • 佛山網站搭建公司哪家好性能優(yōu)化大師
  • 黃做網站游戲推廣員平臺
  • 網站數據庫怎么恢復百度搜索排名
  • 徐州做汽車銷售的公司網站企業(yè)網站建設平臺