4. 何时不使用索引
- 表记录太少
- 经常增删改的表
- 数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)
- 频繁更新的字段不适合创建索引(会增加IO负担)
- where条件里用不到的字段不创建索引
5. 索引何时失效
- like以通配符%开头索引失效
- 当全表扫描比走索引查询的快的时候,会使用全表扫描,而不走索引
- 字符串不加单引号索引会失效
- where中索引列使用了函数(例如substring字符串截取函数)
- where中索引列有运算(用了< or > 右边的索引会失效,用<= or >= 索引不会失效)
- is null可以走索引,is not null无法使用索引(取决于某一列的具体情况)
- 复合索引没有用到左列字段(最左前缀法则,如果没用用到最左列索引,或中间跳过了某列有索引的列,索引会部分失效)
- 条件中有or,前面的列有索引,后面的列没有,索引会失效。想让索引生效,只能将or条件中的每个列都加上索引
6. 索引分类
6.1 普通索引
普通索引是最基本的索引,它没有任何限制;
- 创建索引语法:
create index index_name on table(column);
- 修改表结构方式添加索引:
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
- 删除索引
DROP INDEX index_name ON table
6.2 唯一索引
唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
CREATE UNIQUE INDEX indexName ON table(column(length))
6.3 主键索引
主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。简单来说:主键索引是加速查询 + 列值唯一(不可以有null)+ 表中只有一个。
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ) ;
6.4 组合索引
组合索引指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。
ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
这些是常见的索引分类,还有辅助索引、聚集索引等等...... 每种类型的索引都有其自身的特点和适用场景。在设计数据库时,根据具体的需求和数据访问模式,选择合适的索引类型非常重要。
三、数据的备份与恢复
1. 使用工具,类似Sqlyog、Navicat等导入导出数据。
1.1 使用工具 Navicat for MySQL导入
步骤1:
步骤2:
步骤3:
1.2 使用工具 Navicat for MySQL导出
步骤1:选择需要导出文件内容
步骤2:选择需要导出的文件位置
❕ 使用Navicat工具导入导出因个人电脑性能而异处理时间有所差异。这种方式是最慢的!
2. 使用mysqldump导入导出
2.1 使用mysqldump导入
语法:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(这个名字随便叫)
必须在mysql安装路径里的bin文件里运行cmd
1. 首先创建一个数据库
2. 使用数据库并设置编码集
3. 通过 source 命令输入sql路径即可
2.2 使用mysqldump导出
2.2.1 导出表数据和表结构
doc命令: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
3. 使用LOAD DATA INFILE(OUTFILE)导入导出
导出:select * from 表名 into outfile '/文件名.sql'
导入:load data infile '/文件名.sql' into table 表名(列名1,...)
4. 使用LOAD DATA INFILE(OUTFILE)导入导出注意事项:
如果在my.ini 文件配置中没有设置 secure_file_priv=磁盘名 就没有权限导入导出数据
则会报一下错误