阿里巴巴&淘宝数据库笔试题:连接方式、执行计划与索引解析

需积分: 10 1 下载量 81 浏览量 更新于2024-11-05 收藏 22KB DOCX 举报
"2009年淘宝数据库笔试题涵盖了数据库设计、查询优化、性能监控以及SQL语句的使用等多个方面,旨在考察应聘者对于数据库理论知识和实践操作的掌握程度。" 1. 表连接方式: - **哈希连接(Hash Join)**:通过哈希函数计算两表的连接键,生成哈希表,然后进行匹配。 - **合并连接(Merge Join)**:依赖于两个输入表的有序性,通过排序后逐行比较进行连接。 - **嵌套循环连接(Nested Loop Join)**:遍历一个表的每一行,对另一表进行相应的查找。 - **索引连接(Index Join)**:利用索引来加速连接过程,尤其适用于小表连接大表的情况。 2. 查看SQL执行计划: - **设置自动提示(Autotrace)**:通过在SQL*Plus中使用`SET AUTOTRACE ON`开启,可以显示执行计划和性能统计。 - **使用EXPLAIN PLAN**:在执行SQL前,通过`EXPLAIN PLAN FOR`语句标记查询,然后使用`DBMS_XPLAN.DISPLAY`显示执行计划。 3. 使用成本基础优化器(CBO): - **CBO选择**:当(optimizer_mode='CHOOSE')且表有统计信息时,Oracle会优先选择CBO。 - **CBO与规则基础优化器(RBO)的区别**:RBO基于预定义的规则,而CBO则基于表的统计信息估算成本,选择成本最低的执行路径。 4. 定位高资源消耗的SQL: - 使用`V$SQL`视图,通过筛选`DISK_READS`和`BUFFER_GETS/EXECUTIONS`比率,可以找出执行效率低下的SQL语句。 5. 跟踪特定会话的SQL: - `DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION`过程可以启用指定会话的SQL追踪。 - 通过`V$SESSION`视图定位会话SID和序列号。 - 使用`DBMS_SYSTEM.SET_EV`设置10046事件(高级SQL追踪)。 6. SQL调整重点: - 关注响应时间,分析`DB_BLOCK_GETS`、`CONSISTENT_GETS`、`PHYSICAL_READS`和磁盘排序(`SORTS(DISK)`),以了解I/O操作和缓存效率。 7. 索引的理解: - **B-Tree索引**:最常见的索引类型,适用于等值查询,支持范围查询。 - **Bitmap索引**:适用于多列索引和低基数(较少唯一值)的场景,节省空间,但更新操作代价大。 - **函数索引**:基于函数结果创建的索引,使得函数后的查询能使用索引。 - **分区索引**(Local/Global):提高大数据量的管理和查询效率,局部索引适用于分区表。 索引可以显著提高查询性能,减少全表扫描,但也会增加DML操作(插入、更新、删除)的开销,因为索引需要维护。因此,索引设计应考虑查询模式和写入频率,合理平衡读写性能。