目录
31、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
26、锁的优化策略
1
、读写分离
2
、分段加锁
3
、减少锁持有的时间
4.
多个线程尽量以相同的顺序去获取资源
不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。
27、索引的底层实现原理和优化
B+
树,经过优化的
B+
树
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此
InnoDB
建议为大部分表使用默认自增的主键作为主索引。
28、什么情况下设置了索引但无法使用
1
、以
“%”
开头的
LIKE
语句,模糊匹配
2
、
OR
语句前后没有同时使用索引
3
、数据类型出现隐式转化(如
varchar
不加单引号的话可能会自动转换为
int
型)
29、实践中如何优化 MySQL
最好是按照以下顺序优化:
1、
SQL
语句及索引的优化
2、数据库表结构的优化
3、系统配置的优化
4、硬件的优化
详细可以查看 :
MySQL慢查询优化、索引优化、以及表等优化总结 – mikechen
30、优化数据库的方法
1
、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置
NOTNULL
,
例如
’
省份
’
、’性别
’
最好适用
ENUM
2
、使用连接
(JOIN)
来代替子查询
3、适用联合
(UNION)
来代替手动创建的临时表
4、事务处理
5、锁定表、优化事务处理
6、适用外键,优化锁定表
7、建立索引
8、优化查询语句
31、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
索引是一种特殊的文件
(InnoDB
数据表上的索引是表空间的一个组成部分
)
,它们包含着对数据表里所有记录的引用指针。
普通索引
(
由关键字
KEY
或
INDEX
定义的索引
)
的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE
把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY
来创建。
索引可以覆盖多个数据列,如像
INDEX(columnA, columnB)
索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
32、数据库中的事务是什么?
事务(
transaction
)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
事务特性:
1
、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
2
、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
3
、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
4
、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
或者这样理解:
事务就是被绑定在一起作为一个逻辑工作单元的
SQL
语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 ACID
测试,即原子性,一致性,隔离性和持久性。