重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
兄弟,primary key是主键,每个表只能有一个主键,而且数据是唯一的。\x0d\x0a可以这样写:\x0d\x0aCREATE TABLE IF NOT EXISTS `".$ctb_name."` (\x0d\x0a `id` INT(9) NOT NULL AUTO_INCREMENT PRIMARY KEY,\x0d\x0a `keyid` VARCHAR(20) NOT NULL,\x0d\x0a `key` VARCHAR(20) NOT NULL,\x0d\x0a `stauts` BOOL NOT NULL DEFAULT'0',\x0d\x0aindex `idx_status`(`status`)\x0d\x0a )ENGINE = MYISAM DEFAULT CHARSET=utf8;\x0d\x0a不过,status是bool类型的字段,只有true和false,区分度太低,没有必要加索引。\x0d\x0a\x0d\x0a索引目的是为了使查询更快,区分度小的时候不如全表扫描。
泾源网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
一、mysql 表中如果是单主键的话,那这个主键也会被 系统默认建为 索引
二、mysql 表中如果是复合主键的话,那系统会遵循左对齐原则,即如复合主键 a 和 b字段和c字段..., 默认建的主键索引是abc即主键全有,把所有主键全部建立在一个单独的主键索引中。
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` )
分几种类型:
1.添加PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (
`column`
)
3.添加INDEX(普通索引)
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
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中可以使用alter table这个SQL语句来为表中的字段添加索引。
使用alter table语句来为表中的字段添加索引的基本语法是:
ALTER TABLE 表名 ADD INDEX (字段);
我们来尝试为test中t_name字段添加一个索引。
mysql alter table test add index(t_name);
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
执行成功后,我们来看看结果。
mysql describe test;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| t_id | int(11) | YES | | NULL | |
| t_name | varchar(50) | NO | MUL | NULL | |
| t_password | char(32) | YES | | NULL | |
| t_birth | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
结果可以看出,t_name字段的Key这一栏由原来的空白变成了MUL。这个MUL是什么意思呢?简单解释一下:如果Key是MUL,那么该列的值可以重复,该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL。
主键一般有几种选择:
一般DBA会推荐InnoDB表必须建主键,而且推荐使用整型的自增主键。
三种选择的优先级是 自增id 业务整型字段 UUID。
如果使用UUID作为主键,那么B+树的聚集索引的key就是UUID,UUID通常会比整型字段要长,而且字符串的比较是需要逐个字节比较,所以得出两个缺点
比起自增id,虽然都是整型,但是业务字段有可能不是按顺序插入到表,考虑下图。
此时要插入索引值为4的节点,而B+树每页最多存放两个节点,插入4节点后,树变为
B+树特点是,所有节点从左右往右排好序,自增id插入B+是有序的,只会在节点放满了之后,才会新增一个页去存放,比起非自增id,会减少页分裂次数,提高性能。
对非主键进行索引,就是普通索引。
与聚集索引一样,每个普通索引建立后,会用一个B+树进行维护,但是叶子节点并非存储索引对应行的所有记录,而是只存储了主键值,此时得到主键值后,再回到聚集索引上查找一次,即可得到数据记录,即回表。
这个不带行数据完整信息的索引,就叫二级索引(secondary index),也叫辅助索引。
对多个字段同时建索引,就是联合索引。
当查询条件同时涉及多个字段,就可以使用联合索引。
联合索引会根据字段的出现顺序在B+树中排好序,例如先入name排序,当name相同时就使用age,直到比较出大小为止。 利用这个特性,可以使用最左前缀原则优化SQL。