本文目錄一覽:
mysql創建索引的三種辦法
一、CREATE INDEX方法
CREATE INDEX 索引名 ON 表名 (列名 [長度] [ ASC | DESC])
限制:只能增加普通索引INDEX和UNIQUE INDEX索引這兩種;不能創建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時候指定
創建一般索引
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)
);
創建唯一索引
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)
);
創建主鍵(雖然ALTER TABLE也能創建,但主鍵一般都在創表時建立)
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID)
);
mysql資料庫怎麼建索引?
MySQL資料庫建立索引步驟:
1、使用SQLPlus或者PLSQL登錄MySQL資料庫。
2、執行語句create index indexname on table(col) tablespace tablespacename;其中
“indexname”為需要建立索引的索引名;
“table”是需要建立索引的表;
“col”為需要建立索引的欄位列;
」tablespacename「為建立索引存放的空間(如果不需要制定表空間則使用「create index indexname on table(col)」)。
Mysql建立索引經驗
在實際開發中使用資料庫時,難免會遇到一些大表數據,對這些數據進行查詢時,有時候SQL會查詢得特別慢,這時候,有經驗的老師傅會告訴你,你看一下哪幾個欄位查的多,加一個索引就好了。
那麼,怎麼合理地建立索引呢?這裡分享一下我的一些經驗,如有不妥之處,歡迎批評指正。
1、不要盲目建立索引 , 先分析再創建
索引雖然能大幅度提升我們的查詢性能,但也要知道,在你進行增刪改時,索引樹也要同樣地進行維護。所以,索引不是越多越好,而是按需建立。最好是在一整塊模塊開發完成後,分析一下,去針對大多數的查詢,建立聯合索引。
2、使用聯合索引盡量覆蓋多的條件
這是說在一個慢sql里假如有五個where ,一個 order by ,那麼我們的聯合索引盡量覆蓋到這五個查詢條件,如果有必要,order by 也覆蓋上 。
3、小基數欄位不需要索引
這個意思是,如果一張表裡某個欄位的值只有那麼幾個,那麼你針對這個欄位建立的索引其實沒什麼意義,比如說,一個性別欄位就兩種結果,你建了索引,排序也沒什麼意思(也就是索引里把男女給分開了)
所以說,索引盡量選擇基數大的數據去建立,能最大化地利用索引
4、長字元串可以使用前綴索引
我們建立索引的欄位盡量選擇欄位類型較小的,比如一個varchar(20)和varchar(256)的,我們在20的上面建立的索引和在256上就有明顯的差距(字元串那麼長排序也不好排呀,唉)。
當然,如果一定是要對varchar(256)建立索引,我們可以選擇裡面的前20個字元放在索引樹里(這裡的20不絕對,選擇能盡量分辨數據的最小字元欄位設計),類似這樣KEY index(name(20),age,job) ,索引只會對name的前20個字元進行搜索,但前綴索引無法適用於order by 和 group by。
5、對排序欄位設計索引的優先順序低
如果一個SQL里我們出現了範圍查找,後邊又跟著一個排序欄位,那麼我們優先給範圍查找的欄位設置索引,而不是優先排序。
6、如果出現慢SQL,可以設計一個只針對該條SQL的聯合索引。
不過慢SQL的優化,需要一步步去進行分析,可以先用explain查看SQL語句的分析結果,再針對結果去做相應的改進。explain的東西我們下次再講。
PS:在 select 語句之前增加 explain 關鍵字,MySQL 會在查詢上設置一個標記,執行查詢會返回執行計劃的信息,而不是 執行這條SQL。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279454.html