mysql怎么建立索引 mysql如何創(chuàng)建索引

Mysql建立索引經(jīng)驗(yàn)

在實(shí)際開發(fā)中使用數(shù)據(jù)庫(kù)時(shí),難免會(huì)遇到一些大表數(shù)據(jù),對(duì)這些數(shù)據(jù)進(jìn)行查詢時(shí),有時(shí)候SQL會(huì)查詢得特別慢,這時(shí)候,有經(jīng)驗(yàn)的老師傅會(huì)告訴你,你看一下哪幾個(gè)字段查的多,加一個(gè)索引就好了。

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、淄博網(wǎng)絡(luò)推廣、小程序制作、淄博網(wǎng)絡(luò)營(yíng)銷、淄博企業(yè)策劃、淄博品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供淄博建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

那么,怎么合理地建立索引呢?這里分享一下我的一些經(jīng)驗(yàn),如有不妥之處,歡迎批評(píng)指正。

1、不要盲目建立索引 , 先分析再創(chuàng)建

索引雖然能大幅度提升我們的查詢性能,但也要知道,在你進(jìn)行增刪改時(shí),索引樹也要同樣地進(jìn)行維護(hù)。所以,索引不是越多越好,而是按需建立。最好是在一整塊模塊開發(fā)完成后,分析一下,去針對(duì)大多數(shù)的查詢,建立聯(lián)合索引。

2、使用聯(lián)合索引盡量覆蓋多的條件

這是說(shuō)在一個(gè)慢sql里假如有五個(gè)where ,一個(gè) order by ,那么我們的聯(lián)合索引盡量覆蓋到這五個(gè)查詢條件,如果有必要,order by 也覆蓋上 。

3、小基數(shù)字段不需要索引

這個(gè)意思是,如果一張表里某個(gè)字段的值只有那么幾個(gè),那么你針對(duì)這個(gè)字段建立的索引其實(shí)沒(méi)什么意義,比如說(shuō),一個(gè)性別字段就兩種結(jié)果,你建了索引,排序也沒(méi)什么意思(也就是索引里把男女給分開了)

所以說(shuō),索引盡量選擇基數(shù)大的數(shù)據(jù)去建立,能最大化地利用索引

4、長(zhǎng)字符串可以使用前綴索引

我們建立索引的字段盡量選擇字段類型較小的,比如一個(gè)varchar(20)和varchar(256)的,我們?cè)?0的上面建立的索引和在256上就有明顯的差距(字符串那么長(zhǎng)排序也不好排呀,唉)。

當(dāng)然,如果一定是要對(duì)varchar(256)建立索引,我們可以選擇里面的前20個(gè)字符放在索引樹里(這里的20不絕對(duì),選擇能盡量分辨數(shù)據(jù)的最小字符字段設(shè)計(jì)),類似這樣KEY index(name(20),age,job) ,索引只會(huì)對(duì)name的前20個(gè)字符進(jìn)行搜索,但前綴索引無(wú)法適用于order by 和 group by。

5、對(duì)排序字段設(shè)計(jì)索引的優(yōu)先級(jí)低

如果一個(gè)SQL里我們出現(xiàn)了范圍查找,后邊又跟著一個(gè)排序字段,那么我們優(yōu)先給范圍查找的字段設(shè)置索引,而不是優(yōu)先排序。

6、如果出現(xiàn)慢SQL,可以設(shè)計(jì)一個(gè)只針對(duì)該條SQL的聯(lián)合索引。

不過(guò)慢SQL的優(yōu)化,需要一步步去進(jìn)行分析,可以先用explain查看SQL語(yǔ)句的分析結(jié)果,再針對(duì)結(jié)果去做相應(yīng)的改進(jìn)。explain的東西我們下次再講。

PS:在 select 語(yǔ)句之前增加 explain 關(guān)鍵字,MySQL 會(huì)在查詢上設(shè)置一個(gè)標(biāo)記,執(zhí)行查詢會(huì)返回執(zhí)行計(jì)劃的信息,而不是 執(zhí)行這條SQL。

mysql創(chuàng)建索引的三種辦法

一、CREATE INDEX方法

CREATE INDEX 索引名 ON 表名 (列名 [長(zhǎng)度] [ ASC | DESC])

限制:只能增加普通索引INDEX和UNIQUE INDEX索引這兩種;不能創(chuàng)建PRIMARY KEY索引

二、ALTER TABLE方法

ALTER TABLE 表名 ADD INDEX [索引名] (列名,…)

ALTER TABLE 表名 ADD UNIQUE [ INDEX | KEY] [索引名] (列名,…)

ALTER TABLE 表名 ADD PRIMARY KEY (列名,…)

ALTER TABLE 表名 ADD FOREIGN KEY [索引名] (列名,…)

三、CREATE TABLE時(shí)候指定

創(chuàng)建一般索引

CREATE TABLE tb_stu_info

(

id INT NOT NULL,

name CHAR(45) DEFAULT NULL,

dept_id INT DEFAULT NULL,

age INT DEFAULT NULL,

height INT DEFAULT NULL,

INDEX(height)

);

創(chuàng)建唯一索引

mysql CREATE TABLE tb_stu_info2

(

id INT NOT NULL,

name CHAR(45) DEFAULT NULL,

dept_id INT DEFAULT NULL,

age INT DEFAULT NULL,

height INT DEFAULT NULL,

UNIQUE INDEX(height)

);

創(chuàng)建主鍵(雖然ALTER TABLE也能創(chuàng)建,但主鍵一般都在創(chuàng)表時(shí)建立)

CREATE TABLE mytable(

ID INT NOT NULL,

username VARCHAR(16) NOT NULL,

PRIMARY KEY(ID)

);

mysql創(chuàng)建lower索引

mysql創(chuàng)建lower索引的方法:

1、自動(dòng)創(chuàng)建。在表中定義一個(gè)primarykey或者unique時(shí),MySQL數(shù)據(jù)庫(kù)會(huì)自動(dòng)創(chuàng)建一個(gè)對(duì)應(yīng)的主鍵索引或者是唯一索引。

2、手動(dòng)創(chuàng)建。在創(chuàng)建表的時(shí)候創(chuàng)建索引,即可給已經(jīng)有的表創(chuàng)建索引。

mysql聯(lián)合索引如何創(chuàng)建?

CREATE TABLE `test` ('aaa' varchar(16) NOT NULL default '', 'bbb' varchar(16) NOT NULL default '', 'ccc' int(11) UNSIGNED NOT NULL default 0, KEY `sindex` (`aaa`,`bbb`,`ccc`) ) ENGINE=MyISAM COMMENT='';\x0d\x0a\x0d\x0a這樣就在 aaa、bbb、ccc 3列上建立聯(lián)合索引了。\x0d\x0a\x0d\x0a如果表已經(jīng)建好了,那么就在phpmyadmin里面執(zhí)行:\x0d\x0aalert table test add INDEX `sindex` (`aaa`,`bbb`,`ccc`) \x0d\x0a\x0d\x0a就可以在這3列上建立聯(lián)合索引了。

分享標(biāo)題:mysql怎么建立索引 mysql如何創(chuàng)建索引
網(wǎng)站網(wǎng)址:http://muchs.cn/article0/ddihooo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、用戶體驗(yàn)動(dòng)態(tài)網(wǎng)站、做網(wǎng)站App開發(fā)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)