表button?
為涼城等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及涼城網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站建設、成都網(wǎng)站設計、涼城網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
CREATE TABLE `button` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,? --主鍵索引
`button_name` varchar(45) NOT NULL COMMENT '功能名稱',
`app_id` bigint(20) NOT NULL,
`permission_id` bigint(20) DEFAULT NULL,? -- permission_id 和 app_id 聯(lián)合索引。
`api_id` bigint(20) NOT NULL, --api_id單獨索引
PRIMARY KEY (`id`),
KEY `index_app_permission_lianhe` (`permission_id`,`app_id`) USING BTREE,
KEY `index_api_id_dange` (`api_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
主鍵索引,單獨索引,組合索引使用場景及優(yōu)化
表button 有3個索引,分別是:id主鍵,聯(lián)合索引(permission_id,app_id),api_id(單列索引)
button_name 無索引
查詢where條件中:
主鍵索引:
1、主鍵索引與聯(lián)合索引同時存在,使用主鍵索引
2、主鍵索引與單個索引同時存在,使用主鍵索引
結論:只要主鍵索引在,使用主鍵索引。
聯(lián)合索引 :
1、聯(lián)合索引與單列索引列 同時存在,使用單列索引
2、聯(lián)合索引中列順序顛倒無影響。
3、聯(lián)合索引實行最左側原則,即:單獨查詢條件中只有permission_id可以使用聯(lián)合索引,單獨查詢條件中只有app_id不實用聯(lián)合索引。
4、如果查詢條件中只有app_id,但是select 條件中有 permission_id,則也使用聯(lián)合索引。
5、select id,app_id from button where app_id=1001; 使用聯(lián)合索引
6、explain select id,app_id,button_name from button where app_id=1001;不使用聯(lián)合索引
結論:索引優(yōu)先級:主鍵索引,單列索引,組合索引
聯(lián)合索引中遵從最左側列原則。
當查詢條件和返回結果中僅僅包含聯(lián)合索引中索引項,也使用聯(lián)合索引。如第4條。
當查詢條件中出現(xiàn)聯(lián)合索引中非最左側索引列,返回結果中含義聯(lián)合索引中的列或者主鍵則也使用聯(lián)合索引。
單個索引:
1、查詢條件中有單列索引,則使用,無不使用。
事例:
在mysql中,索引是一種特殊的數(shù)據(jù)庫結構,由數(shù)據(jù)表中的一列或多列組合而成,可以用來快速查詢數(shù)據(jù)表中有某一特定值的記錄。
通過索引,查詢數(shù)據(jù)時不用讀完記錄的所有信息,而只是查詢索引列即可。
通過索引,查詢數(shù)據(jù)時不用讀完記錄的所有信息,而只是查詢索引列。否則,數(shù)據(jù)庫系統(tǒng)將讀取每條記錄的所有信息進行匹配。
可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節(jié)省時間。
因此,使用索引可以很大程度上提高數(shù)據(jù)庫的查詢速度,還有效的提高了數(shù)據(jù)庫系統(tǒng)的性能。
索引的優(yōu)缺點
索引有其明顯的優(yōu)勢,也有其不可避免的缺點。
優(yōu)點
索引的優(yōu)點如下:
1、通過創(chuàng)建唯一索引可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
2、可以給所有的 MySQL 列類型設置索引。
3、可以大大加快數(shù)據(jù)的查詢速度,這是使用索引最主要的原因。
4、在實現(xiàn)數(shù)據(jù)的參考完整性方面可以加速表與表之間的連接。
5、在使用分組和排序子句進行數(shù)據(jù)查詢時也可以顯著減少查詢中分組和排序的時間
缺點
增加索引也有許多不利的方面,主要如下:
1、創(chuàng)建和維護索引組要耗費時間,并且隨著數(shù)據(jù)量的增加所耗費的時間也會增加。
2、索引需要占磁盤空間,除了數(shù)據(jù)表占數(shù)據(jù)空間以外,每一個索引還要占一定的物理空間。如果有大量的索引,索引文件可能比數(shù)據(jù)文件更快達到最大文件尺寸。
3、當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)維護,這樣就降低了數(shù)據(jù)的維護速度。
使用索引時,需要綜合考慮索引的優(yōu)點和缺點。
CREATE [UNIQUE] INDEX index_name ON table_name(字段 [ASC|DESC]);
UNIQUE --確保所有的索引列中的值都是可以區(qū)分的。
[ASC|DESC] --在列上按指定排序創(chuàng)建索引。
(創(chuàng)建索引的準則:
1.如果表里有幾百行記錄則可以對其創(chuàng)建索引(表里的記錄行數(shù)越多索引的效果就越明顯)。
2.不要試圖對表創(chuàng)建兩個或三個以上的索引。
3.為頻繁使用的行創(chuàng)建索引。
)
示例
create index i_1 on emp(empno asc);
在“索引”選項卡,只需簡單地點擊索引欄位來編輯。使用索引工具欄,可以創(chuàng)建新的、編輯或刪除選定的索引欄位。
2
●
添加索引:添加一個索引到表。
●
刪除索引:刪除已選擇的索引。
●
名編輯框:設置索引名。
3
索引包含欄位的操作:雙擊“欄位”或點擊編輯圖標打開編輯器進行編輯,從列表中選擇欄位。從索引中移除欄位,以相同的方式取消勾選即可。也可以用箭頭按鈕來改變索引欄位排序?!白硬糠帧本庉嬁蛴脕碓O置欄位的鍵長度。
溫馨提示:一些數(shù)據(jù)類型不容許由多個欄位索引,例如BLOB。
4
索引類型:定義表索引的類型。
●
NORMAL索引是最基本的索引,并沒有限制,如唯一性。
●
UNIQUE索引和NORMAL索引一樣,只有一個差異,即索引列的全部值必須只出現(xiàn)一次。
●
FULL
TEXT索引用于MySQL全文搜索。
5
索引方法:當創(chuàng)建索引時指定索引類型,BTREE
或
HASH。
注釋:設置任何可選的文本描述當前索引。適用于
MySQL
5.5.3
或以上版本。
6
以上是MySQL
或
MariaDB
表索引的相關內容,掌握了以上知識點,對表索引便有了初步的了解。