原标题:SQL面试必备:100道核心问题及高分策略,揭秘提升MySQL数据库性能的关键优化技巧
导读:
Intro...
- 如何提升Oracle数据库性能,有哪些途径?
个人看法,数据库效率的核心要素在于输入输出(IO),尽管操作内存速度迅速,但磁盘读写速度较慢。因此,优化数据库的核心在于降低磁盘IO。个人认为,优化应分为物理和逻辑两个方面,物理优化涉及Oracle产品本身的调整,而逻辑优化则涉及应用程序层面的优化。
物理优化的基本原则包括: 1. 确保Oracle运行环境(如网络、硬件等)的优化; 2. 选择合适的优化器; 3. 合理配置Oracle实例参数; 4. 构建适当的索引(减少IO); 5. 将索引数据和表数据分开存储在不同表空间上(减少IO冲突); 6. 实施表分区,将数据存储在不同的分区上(以空间换时间,减少IO)。
逻辑优化方面: 1. 可以对表进行逻辑拆分,例如,中国移动用户表可以根据手机尾数分为10个表,这样对性能有一定帮助; 2. 使用占位符语句编写SQL语句,并在开发过程中遵循规定(如全部大写,全部小写等)。Oracle解析语句后会存储到共享池中,例如:select from Emp where name=?这个语句只会在共享池中有一条,而如果是字符串,则根据不同名字存在不同的语句,因此占位符效率较高; 3. 数据库不仅是存储数据的场所,也是编程的场所。一些耗时操作可以通过存储过程在用户较少时执行,从而避开系统使用高峰期,提高数据库性能; 4. 尽量避免使用号,如select* from Emp,因为转换为具体列名需要查询数据字典,较为耗时; 5. 选择合适的表名; 对于多表连接查询,Oracle的优化器可能不会完全优化到这个程度。Oracle中多表查询是根据FROM子句从右到左进行的数据处理,因此最好选择数据量较少的表作为右边的基础表,如果有链接表(多对多中间表),则将链接表放在最右边作为基础表。在默认情况下,Oracle会自动优化,但如果配置了优化器,可能不会自动优化,因此平时最好按照这种方式编写SQL。
-
Oracle中WHERE子句的处理规则: Oracle中WHERE子句是从右到左处理的,表之间的连接应写在其他条件之前,能够过滤掉大量数据的条件应放在WHERE子句的末尾。另外,!=符号比较的列将不使用索引,经过计算的列(如变大写等)也不会使用索引(需要建立函数),is null、is not null等优化器不会使用索引。
-
使用Exits Not Exits替代In Not in。
-
合理使用事务,合理设置事务隔离性。
数据库的数据操作较为消耗资源,尽量使用批量处理,以降低事务操作次数。
- Oracle中字符串连接使用什么符号?
Oracle中使用||符号连接字符串,如‘abc’||‘d’。
- Oracle分区如何优化数据库?
Oracle的分区包括:列表分区、范围分区、散列分区、复合分区。
1) 提高可用性:如果一个表分区因系统故障无法使用,其余良好的分区仍可使用; 2) 减少关闭时间:如果系统故障只影响表的一部分分区,那么只需修复这部分分区,可能比修复整个大表花费的时间更少; 3) 维护简便:如果需要新建表,独立管理每个分区比管理单个大表更简便; 4) 均衡I/O:可以将表的不同分区分配到不同的磁盘来平衡I/O,改善性能; 5) 提高性能:对大表的查询、增加、修改等操作可以分解到表的不同分区中并行执行,从而提高运行速度; 6) 分区对用户透明,最终用户感觉不到分区的存在。
- Oracle如何实现分页?
Oracle使用rownum进行分页,这是效率最高的分页方法,hibernate也使用rownum进行Oracle分页。
select* from ( select rownum r,a from tabName where rownum<= 20) where r> 10
- Oracle如何存储文件,能存储哪些文件?
Oracle能存储clob、nclob、blob、bfile。
Clob:可变长度的字符型数据,即其他数据库中提到的文本型数据类型。
Nclob:可变字符类型的数据,但其存储的是Unicode字符集的字符数据。
Blob:可变长度的二进制数据。
Bfile:数据库外部存储的可变二进制数据。
- Oracle中使用索引的列,在进行WHERE条件查询、分组、排序、使用聚集函数时,哪些会使用索引?
都会使用索引。值得注意的是,复合索引(如在列A和列B上建立的索引)可能会有不同情况。
- 数据库如何实现每隔30分钟备份一次?
通过操作系统的定时任务调用脚本导出数据库。
- Oracle中WHERE条件查询和排序的性能比较?
ORDER BY使用索引的条件非常严格,只有满足以下条件时才能使用索引: 1) ORDER BY中的列必须包含相同的索引,且索引顺序与排序顺序一致; 2) 列不能有null值。
因此,排序的性能通常不高,建议尽量避免使用ORDER BY。
- 解释冷备份和热备份的不同点以及各自的优点?
冷备份发生在数据库已正常关闭的情况下,将关键文件**到另一个位置的说法。
热备份是在数据库运行的情况下,采用归档方式备份数据的方法。
冷备份的优缺点: 1) 是一种非常快速的备份方法(只需**文件); 2) 容易归档(简单**即可); 3) 容易恢复到某个时间点上(只需将文件再**回去); 4) 能与归档方法相结合,实现数据库“最新状态”的恢复; 5) 维护简单,安全性高。
冷备份不足: 1) 单独使用时,只能提供到“某一时间点上”的恢复; 2) 在实施备份的全过程中,数据库必须处于备份状态,不能进行其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态; 3) 若磁盘空间有限,只能**到磁带等外部存储设备上,速度较慢。
3).若磁盘存储空间不足,只能**至磁带等其它外部存储介质上,其速度将相对较慢。
4).无法依据表格或用户进行数据恢复。 热备份的利弊分析: 1).可以在表空间或数据文件层面进行备份,备份过程较短。 2).备份期间数据库可以正常使用。 3).可以实现秒级的数据恢复(恢复至特定时间点)。 4).可以恢复几乎所有数据库对象。 5).恢复过程迅速,多数情况下可以在数据库运行过程中完成恢复。 热备份的缺点包括: 1).绝不允许出现错误,否则后果将极为严重。 2).若热备份操作失败,无法用于时间点的数据恢复。 3).由于维护难度较大,因此需要特别小心谨慎,确保不会出现“以失败告终”的情况。
15.解释data block、extent和segment的区别? data block数据块,是Oracle中最小的逻辑单位,通常Oracle从磁盘读取和写入的是数据块。 extent区,由若干个相邻的数据块组成。 segment段,由一组区组成。 tablespace表空间,是数据库中数据的逻辑存储区域,一个表空间可以包含多个数据文件。