作者:千与千寻de秘密 | 来源:互联网 | 2023-09-15 22:46
7索引索引(index)是帮助mysql高效获取数据的数据结构7.1索引的分类在一个表中,主键索引只能有一个,唯一索引可以有多个主键索引primarykey唯一的标识,主键不可重复
7 索引 索引(index) 是帮助mysql高效获取数据的数据结构
7.1 索引的分类 在一个表中, 主键索引只能有一个, 唯一索引可以有多个
主键索引 primary key 唯一索引 unique key 避免重复的列出现, 唯一索引可以有多个, 多个列都可以标志为唯一索引 常规索引 key/index 全文索引 (fullTest) 在特定的数据库引擎下才有, myIsam 快速定位数据 CREATE TABLE ` app_user` ( ` id` BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT , PRIMARY KEY ( ` id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = 'app用户表' ; Alter table app_useradd INDEX ` name` ( ` name` ) CREATE INDEX id_app_user_name ON app_user( ` name` ) ;
show INDEX from school. student; alter table student add INDEX ` pwd` ( ` pwd` ) alter table school. student add FULLTEXT INDEX ` studentname` ( ` name` ) ; EXPLAIN select * from student; explain select * from student where match ( name) against( '张' ) ;
7.2 测试索引(代码可用) CREATE TABLE &#96; app_user&#96; ( &#96; id&#96; BIGINT ( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT , &#96; name&#96; VARCHAR ( 50 ) DEFAULT &#39;&#39; COMMENT &#39;用户昵称&#39; , &#96; email&#96; VARCHAR ( 50 ) NOT NULL COMMENT &#39;用户邮箱&#39; , &#96; phone&#96; VARCHAR ( 20 ) DEFAULT &#39;&#39; COMMENT &#39;手机号&#39; , &#96; gender&#96; TINYINT ( 4 ) UNSIGNED DEFAULT &#39;0&#39; COMMENT &#39;性别&#xff08;0&#xff1a;男;1:女&#xff09;&#39; , &#96; password&#96; VARCHAR ( 100 ) NOT NULL COMMENT &#39;密码&#39; , &#96; age&#96; TINYINT ( 4 ) DEFAULT &#39;0&#39; COMMENT &#39;年龄&#39; , &#96; create_time&#96; DATETIME DEFAULT CURRENT_TIMESTAMP , &#96; update_time&#96; TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , PRIMARY KEY ( &#96; id&#96; ) ) ENGINE &#61; INNODB DEFAULT CHARSET &#61; utf8 COMMENT &#61; &#39;app用户表&#39; ; delimiter $$ create function mock_data( ) returns int BEGIN DECLARE num int DEFAULT 10 ; DECLARE i int DEFAULT 0 ; WHILE i< num DO INSERT INTO app_user( &#96; name&#96; , &#96; email&#96; , &#96; phone&#96; , &#96; gender&#96; , &#96; password&#96; ) VALUES ( CONCAT( &#39;用户&#39; , i) , &#39;1234&#64;1234.com&#39; , &#39;12345&#39; , floor( RAND( ) * 2 ) , floor( RAND( ) * 99999 ) ) ; set i &#61; i&#43; 1 ; END WHILE ; return i; end ; SELECT mock_data( ) ;
explain select * from app_user where name &#61; &#39;用户9999&#39; ; CREATE INDEX id_app_user_name ON app_user( &#96; name&#96; ) ;
索引 小数据量的时候,用处不大, 但是在大数据量的时候, 区别十分明显.
7.3 索引原则 索引不是越多越好 不要对经常变动的数据加索引 小数据量的表不需要加索引 索引一般加在常用来查询的字段上. 索引的数据结构
Hash类型的索引
Btree: InnoDB默认的结构