SQL優(yōu)化

索引的特點(diǎn)
MySQL中索引的儲(chǔ)存結(jié)構(gòu)有兩種:B 樹(shù)結(jié)構(gòu)和 HASH 結(jié)構(gòu)拾弃,具體和表的儲(chǔ)存引擎相關(guān):MylSAM 和INNODB 儲(chǔ)存引擎只支持 B 樹(shù)結(jié)構(gòu)的索引; 還有另外兩種 Memory 儲(chǔ)存引擎和 Archive 儲(chǔ)存引擎摆霉。
索引的優(yōu)點(diǎn):
1.通過(guò)創(chuàng)建唯一索引豪椿,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性奔坟。
2.可以大大加快數(shù)據(jù)的查詢(xún)速度。
3.在實(shí)現(xiàn)數(shù)據(jù)的引用完整性方面搭盾, 可以加速表盒表之間的連接咳秉。
4.在使用分組和排序進(jìn)行查詢(xún)數(shù)據(jù)時(shí),也可以顯著減少查詢(xún)中分組和排序的時(shí)間鸯隅。
索引的缺點(diǎn):
1.創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間澜建。
2.索引需要占用磁盤(pán)空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外蝌以,每一個(gè)索引還要占一定的物理空間(InnoDB 數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),如果有大量的索引炕舵,索引文件可能比數(shù)據(jù)文件更快達(dá)到最大文件尺寸。占時(shí)間跟畅,占空間咽筋。
3.索引也會(huì)動(dòng)態(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度徊件。
索引的分類(lèi)
1.普通分類(lèi)
普通索引是 MySQL 中的基本索引類(lèi)型奸攻,允許在定義索引的列中插入重復(fù)值和空值。
2.唯一索引
索引列的值必須唯一虱痕,但允許有空值(但只能有一個(gè))
3.主鍵索引
主鍵索引是一種特殊的唯一索引睹耐,不允許有空值。主鍵索引一定是唯一索引部翘,但是唯一索引不一定是主鍵索引硝训。
4 組合索引
組合索引指在表的多個(gè)字段組合上包上創(chuàng)建的索引,只有在查詢(xún)條件中使用了這些字段的左法字段時(shí)新思,案引才會(huì)被使用捎迫。使用組合索引時(shí)遵循龍前綴集合。
創(chuàng)建組合索引時(shí)需要注意以下三點(diǎn):

A. 當(dāng)需要頻繁地將兩列或多列作為個(gè)整體進(jìn)行搜索時(shí)表牢,可以創(chuàng)建組合索引。
B. 創(chuàng)建組合索引時(shí)先列出唯一性最好的列贝次。
C. 組合索引中列的順序和數(shù)量會(huì)影響查詢(xún)的性能崔兴。

  1. 全文索引
    全文索引類(lèi)型為FULLTEXT,在定義索引的列上支持值的全文查找,允許在這些索引列中插入重復(fù)值和空值蛔翅。全文索引可以在CHAR敲茄、VARCHAR或者TEXT類(lèi)型的列上設(shè)置,同時(shí)在MySQL中只有MyISAM存儲(chǔ)引擎支持全文索引山析。
  2. 空間索引
    空間索引是對(duì)空間數(shù)據(jù)類(lèi)型的字段建立的索引堰燎,MySQL中的空間數(shù)據(jù)類(lèi)型有4種,分別是:GEOMETRY笋轨、POINT秆剪、 LINESTRING 和POLYGON赊淑。MySQL使用SPATIAL關(guān)鍵字進(jìn)行擴(kuò)展,使得能夠用于創(chuàng)建正規(guī)索引類(lèi)似的語(yǔ)法創(chuàng)建空間索引仅讽。創(chuàng)建控件索引的字段陶缺,必須設(shè)置NOT NULL約束, 空間索引只能在存儲(chǔ)引擎為MyISAM的表中創(chuàng)建洁灵。
    索引的設(shè)計(jì)原則:
    1.索引并非越多越好饱岸,一個(gè)表中如果有大量的索引,不僅占用磁盤(pán)空間徽千,而且會(huì)影響 INSERT 苫费、DELETE 、UPDATE 等語(yǔ)句的性能双抽,因?yàn)楫?dāng)表中數(shù)據(jù)更改時(shí)百框,索引也會(huì)進(jìn)行調(diào)整和更新。
    2.避免對(duì)經(jīng)常更新的列設(shè)置索引荠诬,并且索引中的列進(jìn)可能的少琅翻。而對(duì)經(jīng)常用于查詢(xún)的字段應(yīng)該創(chuàng)建索引,但要避免添加不必要的字段柑贞。
    3.數(shù)據(jù)量小的表最好不要使用索引方椎,由于數(shù)據(jù)較少,查詢(xún)花費(fèi)的時(shí)間可能比遍歷索引的時(shí)間還短钧嘶,索引可能不會(huì)產(chǎn)生優(yōu)化效果棠众。
    4.在不同值較少的字段上不必要建立索引,如性別字段有决。
create database two20210611 default charset=utf8;

use two20210611;

create table student (
    studentid char(10) PRIMARY key,
    studentname varchar(10) not null,
    gender varchar(2) ,
    age int ,
    index(studentname)
);

show create table student;

insert into student values ('1' , '丘處機(jī)' , '男' , 46 );
select * from student;

-- 執(zhí)行計(jì)劃 explain
explain select * from student where studentname="丘處機(jī)";

-- 組合索引
create table student2 (
    studentid char(10) PRIMARY key,
    studentname varchar(10) not null,
    age int ,
    city varchar(10),
    dormitoryNo varchar(5),     # 宿舍編號(hào)
    index MultiIndex(city,dormitoryNo)  # 組合索引
);

show create table student2;
insert into student2 values ('1' , '楊過(guò)' , 19 , '活死人墓' , '002') ;

select * from student2 where studentname="楊過(guò)";
explain select * from student2 where studentname="楊過(guò)";

select * from student2 where city="活死人墓" and dormitoryNo ='002';
explain select * from student2 where city="活死人墓" and dormitoryNo ='002';

-- 刪除索引
alter table student drop index studentname;
-- 創(chuàng)建索引
create index studentname on student(studentname) ;

-- 事務(wù)
create table user(
    u_name varchar(20) ,
    unique(u_name)
);

insert into user values ("小龍女");

select * from user;

begin;
insert into user values ("李莫愁");
commit;

begin;  -- 事務(wù)的開(kāi)始
insert into user values ("尹志平");
commit;  -- 事務(wù)的結(jié)束


begin ;
insert into user values ("郭靖");
rollback; -- 回滾


-- 回滾點(diǎn)
begin;
insert into user values ("A");
savepoint first_point;
insert into user values ("B");
rollback to savepoint first_point;
insert into user values("C");
commit;

select * from user ;








?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闸拿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子书幕,更是在濱河造成了極大的恐慌新荤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台汇,死亡現(xiàn)場(chǎng)離奇詭異苛骨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)苟呐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)痒芝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人牵素,你說(shuō)我怎么就攤上這事严衬。” “怎么了笆呆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵请琳,是天一觀的道長(zhǎng)粱挡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)单起,這世上最難降的妖魔是什么抱怔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮嘀倒,結(jié)果婚禮上屈留,老公的妹妹穿的比我還像新娘鹰晨。我一直安慰自己趣些,他們只是感情好除师,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布贱纠。 她就那樣靜靜地躺著采章,像睡著了一般废境。 火紅的嫁衣襯著肌膚如雪延赌。 梳的紋絲不亂的頭發(fā)上综液,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天挨约,我揣著相機(jī)與錄音味混,去河邊找鬼。 笑死诫惭,一個(gè)胖子當(dāng)著我的面吹牛翁锡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夕土,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼馆衔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了怨绣?” 一聲冷哼從身側(cè)響起角溃,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篮撑,沒(méi)想到半個(gè)月后减细,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赢笨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质欲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘶伟,死狀恐怖又碌,靈堂內(nèi)的尸體忽然破棺而出九昧,到底是詐尸還是另有隱情绊袋,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布铸鹰,位于F島的核電站癌别,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹋笼。R本人自食惡果不足惜展姐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剖毯。 院中可真熱鬧圾笨,春花似錦、人聲如沸逊谋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胶滋。三九已至板鬓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間究恤,已是汗流浹背俭令。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丁溅,地道東北人唤蔗。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窟赏,于是被迫代替她去往敵國(guó)和親妓柜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 優(yōu)化 SQL 語(yǔ)句的一般步驟 通過(guò) show status 命令了解各種 SQL 的執(zhí)行頻率 MySQL 客戶(hù)端連...
    微日月閱讀 470評(píng)論 0 0
  • MySQL學(xué)習(xí)筆記(6) SQL優(yōu)化(1) 優(yōu)化SQL的一般步驟 本文所涉及案例表來(lái)自MySQL的案例庫(kù)sakil...
    BigfaceMonster閱讀 1,267評(píng)論 0 9
  • 如何提高M(jìn)ySQL數(shù)據(jù)庫(kù)的查詢(xún)效率涯穷,可以從兩個(gè)方面入手:使用索引和使用JOIN棍掐,本文主要講使用索引的一些原則和優(yōu)化...
    _Zy閱讀 3,250評(píng)論 0 12
  • SQL 優(yōu)化 在應(yīng)用的的開(kāi)發(fā)過(guò)程中,由于初期數(shù)據(jù)量小拷况,開(kāi)發(fā)人員寫(xiě) SQL 語(yǔ)句時(shí)更重視功能上的實(shí)現(xiàn)作煌, 但是當(dāng)應(yīng)用系...
    安靜點(diǎn)就睡吧閱讀 280評(píng)論 0 2
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭赚瘦,有人歡樂(lè)有人憂愁粟誓,有人驚喜有人失落,有的覺(jué)得收獲滿(mǎn)滿(mǎn)有...
    陌忘宇閱讀 8,531評(píng)論 28 53