99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

mysql索引怎么設計,數據庫怎么設計索引

mysql怎么設計索引

1.添加PRIMARY KEY(主鍵索引)

站在用戶的角度思考問題,與客戶深入溝通,找到西工網站設計與西工網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:網站設計、成都網站建設、企業官網、英文網站、手機端網站、網站推廣、國際域名空間、網絡空間、企業郵箱。業務覆蓋西工地區。

mysqlALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

mysqlALTER TABLE `table_name` ADD UNIQUE (

`column`

)

3.添加INDEX(普通索引)

mysqlALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysqlALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysqlALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

mysql如何建立索引

我們可以通過查看索引的屬性來判斷創建索引的方法。

查看索引的語法格式如下:

SHOW INDEX FROM 表名 [ FROM 數據庫名]

語法說明如下:

表名:指定需要查看索引的數據表名。

數據庫名:指定需要查看索引的數據表所在的數據庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 數據庫中 student 數據表的索引。

示例

使用 SHOW INDEX 語句查看《MySQL創建索引》一節中 tb_stu_info2 數據表的索引信息,SQL 語句和運行結果如下所示。

mysql SHOW INDEX FROM tb_stu_info2\G

1. row

Table: tb_stu_info2

Non_unique: 0

Key_name: height

Seq_in_index: 1

Column_name: height

Collation: A

Cardinality: 0

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

1 row in set (0.03 sec)

其中各主要參數說明如下:

參數 說明

Table 表示創建索引的數據表名,這里是 tb_stu_info2 數據表。

Non_unique 表示該索引是否是唯一索引。若不是唯一索引,則該列的值為 1;若是唯一索引,則該列的值為 0。

Key_name 表示索引的名稱。

Seq_in_index 表示該列在索引中的位置,如果索引是單列的,則該列的值為 1;如果索引是組合索引,則該列的值為每列在索引定義中的順序。

Column_name 表示定義索引的列字段。

Collation 表示列以何種順序存儲在索引中。在 MySQL 中,升序顯示值“A”(升序),若顯示為 NULL,則表示無分類。

Cardinality 索引中唯一值數目的估計值?;鶖蹈鶕淮鎯檎麛档慕y計數據計數,所以即使對于小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL 使用該索引的機會就越大。

Sub_part 表示列中被編入索引的字符的數量。若列只是部分被編入索引,則該列的值為被編入索引的字符的數目;若整列被編入索引,則該列的值為 NULL。

Packed 指示關鍵字如何被壓縮。若沒有被壓縮,值為 NULL。

Null 用于顯示索引列中是否包含 NULL。若列含有 NULL,該列的值為 YES。若沒有,則該列的值為 NO。

Index_type 顯示索引使用的類型和方法(BTREE、FULLTEXT、HASH、RTREE)。

Comment 顯示評注。

MySQL性能優化之索引設計

上一篇給小伙伴們講了關于SQL查詢性能優化的相關技巧,一個好的查詢SQL離不開合理的索引設計。這篇小二就來嘮一嘮怎么合理的設計一個索引來優化我們的查詢速度,要是有不合理的地方...嗯..

當然啦,開個玩笑,歡迎小伙伴們指正!

通常情況下,字段類型的選擇是需要根據業務來判斷的,通常需要遵循以下幾點。

下列各種類型表格內容來自菜鳥教程,權當備忘。

優化建議:

注意: INT(2)設置的為顯示寬度,而不是整數的長度,需要配合 ZEROFILL 使用 。

例如 id 設置為 TINYINT(2) UNSIGNED ,表示無符號,可以存儲的最大數值為255,其中 TINYINT(2) 沒有配合 ZEROFILL 實際沒有任何意義,例如插入數字200,長度雖然超過了兩位,但是這個時候是可以插入成功的,查詢結果同樣為200;插入數字5時,同樣查詢結果為5。

而 TINYINT(2) 配合 ZEROFILL 后,當插入數字5時,實際存儲的還是5,不過在查詢是MySQL會在前面補上一個0,即查詢出來的實際為 05 。

優化建議:

優化建議:

通常來說,考慮好表中每個字段應該使用什么類型和長度,建完表需要做的事情不是馬上建立索引,而是先把相關主體業務開發完畢,然后把涉及該表的SQL都拿出來分析之后再建立索引。

盡量少建立單值索引( 唯一索引除外 ),應當設計一個或者兩三個聯合索引,讓每一個聯合索引都盡量去包含SQL語句中的 where、order by、group by 的字段,同時確保聯合索引的字段順序盡量滿足SQL查詢的最左前綴原則。

索引基數是指這個字段在表里總共有多少個不同的值,比如一張表總共100萬行記錄,其中有個性別字段,性別一共有三個值:男、女、保密,那么該字段的基數就是3。

如果對這種小基數字段建立索引的話,因為索引樹中只有男、女、保密三個值,根本沒法進行快速的二分查找,同時還需要回表查詢,還不如全表掃描嘞。

一般建立索引,盡量使用那些基數比較大的字段,那么才能發揮出B+樹快速二分查找的優勢來。

在 where 和 order by 出現索引設計沖突時,是優先針對where去設計索引?還是優先針對order by設計索引?

通常情況下都是優先針對 where 來設計索引,因為通常情況下都是先 where 條件使用索引快速篩選出來符合條件的數據,然后對進行篩選出來的數據進行排序和分組,而 where 條件快速篩選出來的的數據往往不會很多。

對生產實際運行過程中,或者測試環境大數據量測試過程中發現的慢查詢SQL進行特定的索引優化、代碼優化等策略。

終于輪到實戰了,小二最喜歡實戰了。

寫到這里不得不吐槽一下,這個金三銀四的跳槽季節,年前提離職了,結果離職還沒辦完就封村整整兩個禮拜了,嗚嗚嗚...

上節小二就提到會有個很有意思的小案例,那么在疫情當下,門都出不去的日子,感覺這個例子更有意思了,咱們來討論一下各種社交平臺怎么做的用戶信息搜索呢。

社交平臺有一個小伙伴們都喜歡的功能,搜索好友信息,比如小二熟練的點開省份...城市..性別..年齡..身高...

咳咳咳...小二怎么可能干這種事情,小二的心里只有代碼,嗯...沒錯,就是這樣。

這個就可以說是對于用戶信息的查詢篩選了,通常這種表都是非常大數據量的,在不考慮分庫分表的情況下,怎么通過索引配合SQL來優化呢?

通常我們在編寫SQL是會寫出類似如下的SQL來執行,有 where、order by、limit 等條件來查詢。

那么接下來小二一個一個慢慢增加字段來分析分析,怎么根據業務場景來設計索引。

針對這種情況,很簡單,設計一個聯合索引 (provice, city, sex) 就完事了。

那么這時候有小伙伴就會說了,很簡單啊,范圍字段放最后咱還是知道的,聯合索引改成 (provice, city, sex, age) 不就可以了。

嗯,是的,這么干沒毛病,但是小伙伴們有沒有想過有些人萬一既喜歡帥哥又喜歡美女,別想歪了哈...,挺多小姐姐就既喜歡帥哥又喜歡美女的。

那么這個時候小姐姐就不搜索性別了,那么這個時候聯合索引只能用到前兩個字段了,那么不符合咱們的專業標準啊,咋辦呢?這時候還是有辦法的,咱們只需要動動小腦袋改改SQL就行了,在沒有選擇性別時判斷一下,改成下面這樣就可以了。

咋辦嘞,同樣往聯合索引里面塞,例如 (provice, city, sex, hobby, xx, age) 。

針對這種多個范圍查詢的話,為了比較好的利用索引,在業務允許的情況下可以使用固定范圍,然后數據庫字段存儲范圍標識就可以了,這樣就轉化為了等值匹配,就可以很好地利用索引了。

例如最后登錄時間字段不記錄最后登錄時間,而是記錄設置字段 is_login_within_seven_days 在7天內有登錄則為1,否則為0,最后索引設計成 (provice, city, sex, hobby, xx, is_login_within_seven_days, age) 。

那么根據場景最后設計出來的這個索引可能已經可以覆蓋大部分的查詢流量了,那么如果還有其他一部分熱度比較高的查詢怎么辦呢,辦法也很簡單啊,再加一兩個索引即可。

例如通常會查詢這個城市比較受歡迎(評分:score)的小姐姐,這時候添加一個聯合索引 (provice, city, sex, score) 那么就可以了。

可以看出,索引時必須結合場景來設計的,思路就是盡量用不超過3個復雜的聯合索引來抗住大部分的80%以上的常用查詢流量,然后再用一兩個二級索引來抗下一些非常用查詢流量。

以上就是小二要給大家分享的索引設計,如果能動動你發財的小手給小二點個免費的贊就更好啦~

下篇小二就來講講MySQL事務和鎖機制。

如何正確合理的建立MYSQL數據庫索引

MySQL索引類型包括:

(1)普通索引

這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:

◆創建索引

CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小于字段實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。

◆修改表結構

ALTER mytable ADD INDEX [indexName] ON (username(length))

◆創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 刪除索引的語法:

DROP INDEX [indexName] ON mytable;

(2)唯一索引

與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

◆創建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

◆修改表結構

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

◆創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

(3)主鍵索引

它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 當然也可以用 ALTER 命令。記住:一個表只能有一個主鍵。

(4)組合索引

為了形象地對比單列索引和組合索引,為表添加多個字段:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表時,usernname長度為 16,這里用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引文件的大小,提高INSERT的更新速度。

如果分別在 usernname,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低于我們的組合索引。雖然此時有了三個索引,但MySQL只能用到其中的那個它認為似乎是最有效率的單列索引。

建立這樣的組合索引,其實是相當于分別建立了下面三組組合索引:

usernname,city,age usernname,city usernname 為什么沒有 city,age這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結果。簡單的理解就是只從最左面的開始組合。并不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:

SELECT * FROM mytable WHREE username="admin" AND city="鄭州" SELECT * FROM mytable WHREE username="admin" 而下面幾個則不會用到:

SELECT * FROM mytable WHREE age=20 AND city="鄭州" SELECT * FROM mytable WHREE city="鄭州"

(5)建立索引的時機

一般來說,在WHERE和JOIN中出現的列需要建立索引,但也不完全如此,因為MySQL只對,=,=,,=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。例如:

SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city='鄭州' 此時就需要對city和age建立索引,由于mytable表的userame也出現在了JOIN子句中,也有對它建立索引的必要。

剛才提到只有某些時候的LIKE才需建立索引。因為在以通配符%和_開頭作查詢時,MySQL不會使用索引。例如下句會使用索引:

SELECT * FROM mytable WHERE username like'admin%' 而下句就不會使用:

SELECT * FROM mytable WHEREt Name like'%admin' 因此,在使用LIKE時應注意以上的區別。

(6)索引的不足之處

上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:

◆雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。

◆建立索引會占用磁盤空間的索引文件。一般情況這個問題不太嚴重,但如果你在一個大表上創建了多種組合索引,索引文件的會膨脹很快。

索引只是提高效率的一個因素,如果你的MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。

(7)使用索引的注意事項

使用索引時,有以下一些技巧和注意事項:

◆索引不會包含有NULL值的列

只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那么這一列對于此復合索引就是無效的。所以我們在數據庫設計時不要讓字段的默認值為NULL。

◆使用短索引

對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內,多數值是惟一的,那么就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁盤空間和I/O操作。

◆索引列排序

MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那么order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建復合索引。

◆like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。

◆不要在列上進行運算

select * from users where YEAR(adddate)2007; 將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成

select * from users where adddate‘2007-01-01’;

◆不使用NOT IN和操作

網頁標題:mysql索引怎么設計,數據庫怎么設計索引
地址分享:http://www.yijiale78.com/article28/dsiopcp.html

成都網站建設公司_創新互聯,為您提供網站內鏈App開發服務器托管、響應式網站外貿建站做網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司