JAVA面试专题:数据库设计与优化

需积分: 1 0 下载量 120 浏览量 更新于2024-08-05 收藏 701KB PDF 举报
JAVA_mysql面试专题18道 在本篇资源中,我们将讨论数据库 normalization 的三个范式、数据库优化经验、索引的种类和工作机制等知识点。 **数据库 normalize 三范式** 数据库 normalization 是一种将关系型数据库设计成符合某些规则的过程,以减少数据冗余和依赖关系。数据库 normalization 的三个范式分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。 1. **第一范式(1NF)**:字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式,数据库表中的字段都是单一属性的,不可再分。 2. **第二范式(2NF)**:在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。 3. **第三范式(3NF)**:满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。所以第三范式具有如下特征:每一列只有一个值、每一行都能区分、每一个表都不包含其他表已经包含的非主关键字信息。 **数据库优化经验** 1. **使用 PreparedStatement**:PreparedStatement 一般来说比 Statement 性能高。一个 SQL 发给服务器去执行,涉及步骤:语法检查、语义分析、编译、缓存。 2. **外键约束的影响**:有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。 3. **适当冗余**:表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等。 4. **UNION 和 UNION ALL**:UNION 和 UNION ALL 都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。 UNION 在进行表链接后会筛选掉重复的记录, Union All 不会去除重复记录。 Union 将会按照字段的顺序进行排序;Union All 只是简单的将两个结果合并后就返回。 **索引的种类** 索引是数据库管理系统中一个排序的数据结构,它可以提高数据检索的速度。 1. **普通索引**:即针对数据库表创建索引。 2. **唯一索引**:与普通索引类似,不同的是:MySQL 数据库索引列的值必须唯一,但允许有空值。 3. **主键索引**:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。 4. **组合索引**:为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。 **索引的工作机制** 数据库索引是一种特殊的数据结构,它可以提高数据检索的速度。索引的工作机制是将数据库表中的数据按照一定的顺序排列,使得数据检索变得更加快速和高效。
2023-03-22 上传

[root@zhaosai conf]# sqoop import --connect jdbc:mysql://zhaosai:3306/mydb --username root --password jqe6b6 --table news --target-dir /user/news --fields-terminated-by “;” --hive-import --hive-table news -m 1 Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../hbase does not exist! HBase imports will fail. Please set $HBASE_HOME to the root of your HBase installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. Warning: /opt/programs/sqoop-1.4.7.bin__hadoop-2.6.0/../zookeeper does not exist! Accumulo imports will fail. Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation. 23/06/10 16:07:14 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 23/06/10 16:07:15 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 23/06/10 16:07:15 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 23/06/10 16:07:15 INFO tool.CodeGenTool: Beginning code generation 23/06/10 16:07:15 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:875) at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:59) at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:763) at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:786) at org.apache.sqoop.manager.SqlManager.getColumnInfoForRawQuery(SqlManager.java:289) at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:260) at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:246) at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:327) at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1872) at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1671) at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:106) at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:501) at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:628) at org.apache.sqoop.Sqoop.run(Sqoop.java:147) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

2023-06-11 上传