3 mysql 补充

一、索引

索引就像图书的目录,可以加快查询速度

1.1 索引的优点

  • 可以大大加快数据的检索速度
  • 唯一索引可以保证数据的唯一性
  • 可以降低分组、排序的时间
  • 可以使用查询优化器提高系统性能

1.2 索引的缺点

  • 建立索引会建立对应索引文件,占用大量空间
  • 建立索引会降低增、删、改的效率

1.3 不建立索引

  • 频繁更新的字段不要建立索引
  • 没出现在where、having,不要建立索引
  • 数据量少的表没有必要建立索引
  • 唯一性比较差的字段不要建立索引

1.4 索引分类

普通索引

create index 索引名 on 表名(字段 asc/desc) 默认asc升序

唯一索引

在唯一索引所在列不能有重复值,增加和修改会受影响。

create  unique index 索引名 on 表名(字段 asc/desc) 默认asc升序

主键索引

创建表,主键索引会自动添加,要求在主键上不能有重复值,不能有空值

复合索引(联合索引) 索引了多个列

  • 使用联合索引,必须包含左前缀。 (a,b,c)
    • a
    • a,b
    • a,b,c

全文索引(了解)

一般会用全文索引服务器(sphinx),不会直接创建全文索引

create  FULLTEXT index 索引名 on 表名(字段 asc/desc)

删除索引

drop index 索引名 on 表

查看索引

show index from 表 \G

#查看sql性能
explain select sno,sname from student where class='1812'\G;
mysql> explain select sno,sname from student where sclass='1812' ;
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | student | NULL       | ALL  | NULL          | NULL | NULL    | NULL |   10 |    10.00 | Using where |
+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
type:  ALL  全表扫描
       index  使用索引
       range  在指定范围内使用索引
       const、system 常量查询

其它创建索引的方式

alter table 表 add index(字段1,字段2,...)
alter table 表 add primary key(字段1,字段2,...)
alter table 表 add unique(字段1,字段2,...)
alter table 表 add fulltext(字段1,字段2,...)

1.5 不使用索引的情况

  • 查询时的联合索引没有左前缀,不使用索引
  • or条件里,如果一方字段没有索引,则不使用索引
  • 类型不对应的不会使用索引
  • like ‘%tom’ ,如果左边是通配符,不会使用索引
  • 使用!=、<>、not in操作,不使用索引

二、外键

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表

  • 数据表引擎必须是innodb
  • 主表和从表相关的外键字段类型必须兼容
创建外键
ALTER TABLE 从表名
ADD CONSTRAINT 外键名称 FOREIGN KEY (从表的外键列) REFERENCES 主表名 (主键列) 
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
  1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新子表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
  
  2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。

  3. NO ACTION: InnoDB拒绝删除或者更新父表。

  4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。

删除外键
ALTER TABLE 从表 DROP FOREIGN KEY 外键名

猜你喜欢

转载自blog.csdn.net/qq_42795565/article/details/84313294