MySQL高级
索引
目的在于提高查询效率,是对数据表里所有记录的引用指针。通过不断的缩小数据的获取范围,筛选出最终想要的结果,并且把随机的事件变成顺序的事件,总是通过同一种查找方式来锁定数
怎么理解呢?我来举个例子,查新华字典,查一个狗字,我们可以通过gou拼音来找,首先我们要先找到g,在g的范围内查找出o,然后在go的范围内查找出u
索引不同于约束。一张表中,索引可以只有一个字段(可能要求值唯一),也可以是多个字段组成索引,这样的索引叫作 联合索引 。即为想要提高查找速度,必须要通过这多个索引进行查找
我们回想之前的主键一个字段 唯一非空,联合主键多个字段,唯一非空,同理索引也一样
查看索引 show index from table_name;
创建索引
create index ID on 学生表格1(age); -- 创建索引 create index 索引名称 on table_name(字段名称(长度)) -- 如果指定字段是字符串,建议长度与字段长度一致。如果不是字符串,可以不填写长度部分
-- 唯一索引 create unique index 索引名称 on table_name (字段名称) -- 联合索引 create index 索引名称 on table_name (column1, column2); -- 删除索引 drop index 索引名称 on 表名;
分区
数据库中的数据是以文件的形势存在磁盘上的。一张表主要对应着三个文件, frm 存放表结构,myd 存放表数据,myi 存表索引。如果一张表的数据量太大,myd 、myi 就会变的很大,查找数据就会很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块。查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这时候,可以把数据分配到不同的磁盘里面去。
就拿xlsx表格来讲
一张xlsx表格可以有多个子表,但是总体数据量不变,只是每个子表的存储变少了,而分区就是这个意思
–partition by range
CREATE TABLE table_name ( id int not null ,name varchar(30) ,age int default 0 ,gender varchar(4) default '未知' ,cdate date not null ,week int not null ) PARTITION BY RANGE (week) ( PARTITION w1 VALUES (1) ,PARTITION w2 VALUES (2) ,PARTITION w3 VALUES (3) ,PARTITION w4 VALUES (4) ,PARTITION w5 VALUES (5) ,PARTITION w6 VALUES (6) ,PARTITION w7 VALUES (7) );
分区一般使用于数据很大的数据库中,如果数据较小的话一般不使用
图形化界面
在前面看我过我博客的小可爱就会会知道,上面事务和分区可以在图形化界面操作,
这里就不过多介绍了,小可爱可以去慢慢挖掘
总结
这里简单的介绍了索引和分区,也不懂的小可爱可以私聊