表button?
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出鹽都免費(fèi)做網(wǎng)站回饋大家。
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單獨(dú)索引
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
主鍵索引,單獨(dú)索引,組合索引使用場(chǎng)景及優(yōu)化
表button 有3個(gè)索引,分別是:id主鍵,聯(lián)合索引(permission_id,app_id),api_id(單列索引)
button_name 無索引
查詢where條件中:
主鍵索引:
1、主鍵索引與聯(lián)合索引同時(shí)存在,使用主鍵索引
2、主鍵索引與單個(gè)索引同時(shí)存在,使用主鍵索引
結(jié)論:只要主鍵索引在,使用主鍵索引。
聯(lián)合索引 :
1、聯(lián)合索引與單列索引列 同時(shí)存在,使用單列索引
2、聯(lián)合索引中列順序顛倒無影響。
3、聯(lián)合索引實(shí)行最左側(cè)原則,即:?jiǎn)为?dú)查詢條件中只有permission_id可以使用聯(lián)合索引,單獨(dú)查詢條件中只有app_id不實(shí)用聯(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)合索引
結(jié)論:索引優(yōu)先級(jí):主鍵索引,單列索引,組合索引
聯(lián)合索引中遵從最左側(cè)列原則。
當(dāng)查詢條件和返回結(jié)果中僅僅包含聯(lián)合索引中索引項(xiàng),也使用聯(lián)合索引。如第4條。
當(dāng)查詢條件中出現(xiàn)聯(lián)合索引中非最左側(cè)索引列,返回結(jié)果中含義聯(lián)合索引中的列或者主鍵則也使用聯(lián)合索引。
單個(gè)索引:
1、查詢條件中有單列索引,則使用,無不使用。
事例:
復(fù)合主鍵就是指你表的主鍵含有一個(gè)以上的字段組成 。 例如; create table test ( name varchar(19), id number, value varchar(10), primary key (id,name) ) 上面的id和name字段組合起來就是你test表的復(fù)合主鍵 (若其一為單索引字段時(shí),左邊的id才會(huì)有索引) 它的出現(xiàn)是因?yàn)槟愕膎ame字段可能會(huì)出現(xiàn)重名,所以要加上ID字段這樣就可以保證你記錄的唯一性 一般情況下,主鍵的字段長(zhǎng)度和字段數(shù)目要越少越好
聯(lián)合主鍵,顧名思義就是多個(gè)主鍵聯(lián)合形成一個(gè)主鍵組合,體現(xiàn)在聯(lián)合。 (主鍵原則上是唯一的,別被唯一值所困擾。) 索引可以極大的提高數(shù)據(jù)的查詢速度,但是會(huì)降低插入、刪除、更新表的速度,因?yàn)樵趫?zhí)行這些寫操作時(shí),還要操作索引文件。 簡(jiǎn)單的例子 主鍵A跟主鍵B組成聯(lián)合主鍵 主鍵A跟主鍵B的數(shù)據(jù)可以完全相同(困擾吧,沒關(guān)系),聯(lián)合就在于主鍵A跟主鍵B形成的聯(lián)合主鍵是唯一的。
聯(lián)合主鍵體現(xiàn)在多個(gè)表上,復(fù)合主鍵體現(xiàn)在一個(gè)表中的多個(gè)字段
復(fù)合主鍵:
直接在表里就可以建,把兩列都選中,先設(shè)置都不為空,然后右建設(shè)為主建.如果想要查看建多主鍵的語句,可以把表手動(dòng)建完后,再查看建表語句.
聯(lián)合主鍵:把兩個(gè)列看成是一個(gè)整體,這個(gè)整體是不為空,唯一,不重復(fù)
1.創(chuàng)建表的同時(shí)創(chuàng)建聯(lián)合主鍵
語法1
語法2
2.針對(duì)已經(jīng)存在表,添加聯(lián)合主鍵
如果是對(duì)多個(gè)列增加 UNIQUE 約束,通過 ADD UNIQUE KEY 處理。
mysql CREATE TABLE test_unique(
- id INT,
- name VARCHAR(10),
- value VARCHAR(10)
- );
Query OK, 0 rows affected (0.08 sec)
mysql ALTER TABLE test_unique
- ADD UNIQUE KEY(name, value);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
CREATE?TABLE?`products_description`?(
`products_id`?int(11)?NOT?NULL,
`language_id`?int(11)?NOT?NULL?default
'1',
`products_name`?varchar(64)?NOT?NULL?default
'',
`products_description`?text,
`products_short_description`?text,
`products_url`?varchar(255)?default?NULL,
`products_viewed`?int(5)?default?'0',
PRIMARY?KEY?(`products_id`,`language_id`),
KEY?`products_name`?(`products_name`)
)?ENGINE=InnoDB?DEFAULT?CHARSET=latin1;
指定primary key 時(shí)用 PRIMARY KEY (`products_id`,`language_id`),這樣就能指定聯(lián)合主鍵了