- 索引的为什么使查询加快?有啥缺点?
默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度
缺点:
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
-
sql语句左外连接 右外连接 内连接 全连接区别
pass -
mysql数据备份方式,如何恢复?你们的备份策略是什么?
物理完全备份
备份所有数据库文件:/var/lib/mysql/
备份所有binlog文件: /var/lib/mysql/mysql-bin.
备份选项文件: /etc/my.cnf
mysqldump逻辑备份
mysqldump -uroot -p —all-databases > /backup/mysqldump/all.db
物理备份恢复
mv /var/lib/mysql /var/lib/mysql.old #先把原来的数据目录改名
cp -a /backups/mysql /var/lib
逻辑备份数据恢复
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db
- 如何配置数据库主从同步,实际工作中是否遇到数据不一致问题?如何解决?
为每个服务器配置唯一值的server-id
主库
开启binlog日志
创建主从复制用户
查看master的状态
从库
change master to设置主库信息
start slave开始复制
-
mysql约束有哪些?
非空约束
唯一约束
主键约束
外键约束 -
二进制日志(binlog)用途?
BINLOG记录数据库的变更过程。例如创建数据库、建表、修改表等DDL操作、以及数据表的相关DML操作,这些操作会导致数据库产生变化,开启binlog以后导致数据库产生变化的操作会按照时间顺序以“事件”的形式记录到binlog二进制文件中 -
mysql数据引擎有哪些?
常用的 myisam、innodb
区别:
InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;
MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;
InnoDB 支持外键,MyISAM 不支持;
MyISAM 是默认引擎,InnoDB 需要指定;
InnoDB 不支持 FULLTEXT 类型的索引;
InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表;
对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;
清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;
InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’ -
如何查询mysql数据库存放路径?
mysql> show variables like 'datadir%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
- mysql数据库文件后缀名有哪些?用途什么?
myisam
.frm文件:保护表的定义
.myd:保存表的数据
.myi:表的索引文件
innodb
.frm:保存表的定义
.ibd:表空间
- 如何修改数据库用户的密码?
mysql8之前
set password for 用户名@localhost = password('新密码');
mysqladmin -u用户名 -p旧密码 password 新密码
update user set password=password('123') where user='root' and host='localhost';
mysql8之后
# mysql8初始对密码要求高,简单的字符串不让改。先改成:MyNewPass@123;
alter user 'root'@'localhost' identified by 'MyNewPass@123';
# 降低密码难度
set global validate_password.policy=0;
set global validate_password.length=4;
# 修改成简易密码
alter user 'root'@'localhost'IDENTIFIED BY '1111';
- 如何修改用户权限?如何查看?
授权:
grant all on . to user@’%’ identified by ‘passwd’
查看权限
show grants for user@’%’;