找到 985 篇文章,关于软件与编码
4K+ 阅读量
问题:您想在 Oracle 中 UNPIVOT 结果。解决方案UNPIVOT 子句是 Oracle 数据库 11g 的新功能,它允许您将查询输出中的列翻转为行,同时允许您对数据运行聚合函数。考虑一个名为 customer 的表,其中存储以下数据。示例SELECT * FROM customers;输出1 tammy.bryant@internalmail Tammy Bryant 2 roy.white@internalmail Roy White 3 gary.jenkins@internalmail Gary Jenkins 4 victor.morris@internalmail Victor Morris 5 beverly.hughes@internalmail Beverly Hughes在 customer 表中,我们可以看到全名包含名和姓... 阅读更多
14K+ 阅读量
问题:您想在 Oracle 中 PIVOT 结果。解决方案PIVOT 子句是 Oracle 数据库 11g 的新功能,它允许您将查询输出中的行翻转为列,同时允许您对数据运行聚合函数。PIVOT 特别适用于查看大量数据的整体趋势。我们将使用销售数据来演示其用法。示例SELECT * FROM sales;输出12008 12 1998-02-28 6 37 552 1898.88 12008 18 1998-02-28 6 37 463 1592.72 12008 20 1998-02-28 6 37 2430 8359.2 12008 25 ... 阅读更多
9K+ 阅读量
问题:您想监控 Oracle 中临时表空间的使用情况。解决方案:我们可以使用以下查询来找出临时表空间中已使用和空闲的空间。我们将从识别临时表空间名称开始。示例SELECT tablespace_name FROM dba_tablespaces WHERE contents = 'TEMPORARY';输出TEMP接下来,我们将使用以下 SQL 来识别临时表空间中已使用和空闲的空间。示例SELECT * FROM (SELECT a.tablespace_name, SUM(a.bytes/1024/1024) allocated_mb FROM dba_temp_files a WHERE a.tablespace_name = 'TEMP' GROUP BY a.tablespace_name ) x, (SELECT SUM(b.bytes_used/1024/1024) used_mb, SUM(b.bytes_free /1024/1024) free_mb FROM v$temp_space_header b ... 阅读更多
8K+ 阅读量
问题:您想找出数据库中最近的重要等待事件,以及导致这些等待事件的大多数用户、SQL 语句和对象。解决方案Oracle 提供了 V$ACTIVE_SESSION_HISTORY 来获取有关最常见等待事件的信息,以及导致这些等待事件的 SQL 语句、数据库对象和用户。查找等待事件的 SQL 示例SELECT event, SUM(wait_time + time_waited) total_wait_time FROM v$active_session_history GROUP BY event ORDER BY total_wait_time DESC;要找出遇到最多等待事件的用户,我们可以使用以下 SQL。示例SELECT s.sid, s.username, SUM(a.wait_time + a.time_waited) total_wait_time FROM v$active_session_history a, ... 阅读更多
987 阅读量
问题:您想将 GROUPING() 与 ROLLUP、CUBE 和 SETS 函数一起使用。解决方案GROUPING() 函数接受一个列并返回 0 或 1。当列值为 null 时,此函数返回 1;当列值为非 null 时,返回 0。但是,GROUPING() 仅在使用 ROLLUP 或 CUBE 的查询中使用。当您希望在返回 null 的情况下显示一个值时,GROUPING() 非常有用。ROLLUP 中单个列的 GROUPING()将列传递给 ROLLUP 的 SQL以下示例中的最后一行将生成费用总计/总和。此总计表示为... 阅读更多
2K+ 阅读量
问题:您想识别导致数据库中等待时间最长的 SQL 语句。解决方案我们可以使用以下 SQL 语句来识别导致问题的 SQL。以下查询将对过去 30 分钟内运行的 SQL 语句进行排名,并根据每个查询的总等待时间显示它们。示例SELECT ash.user_id, u.username, s.sql_text, SUM(ash.wait_time + ash.time_waited) ttl_wait_time FROM v$active_session_history ash, v$sqlarea s, dba_users u WHERE ash.sample_time BETWEEN sysdate - 60/2880 AND sysdate AND ash.sql_id = s.sql_id AND ash.user_id = u.user_id GROUP BY ash.user_id, s.sql_text, u.username ORDER BY ttl_wait_time ;当您遇到性能... 阅读更多
412 阅读量
问题:您想为特定查询收集扩展解释计划统计信息。解决方案我们可以使用 GATHER_PLAN_STATISTICS 提示。此提示在运行时放置在查询中时,将生成扩展运行时统计信息。它基本上有两个步骤。使用 gather_plan_statistics 提示执行查询。使用 dbms_xplan.display_cursor 显示结果。示例SELECT /*+ gather_plan_statistics */ city, round(avg(fees)) avg_fees, min(fees) min_fees, max(fees) max_fees FROM students e, departments d, locations l WHERE e.department_id = d.department_id AND l.location_id = d.location_id GROUP BY city;输出Southlake 5760 4200 9000 Seattle 10701 6900 ... 阅读更多
469 阅读量
问题:您的查询在多个表上具有 JOIN 条件,存在性能问题,并且您希望通过在查询中放置适当的提示来覆盖连接类型。解决方案:连接有三种可能的类型:嵌套循环、哈希和排序合并。嵌套循环连接提示:要调用嵌套循环连接,请使用 USE_NL 提示示例EXPLAIN PLAN FOR SELECT /*+ use_nl(students, departments) */ first_name, department_name FROM students e, departments d WHERE e.department_id = d.department_id; SELECT * FROM table(DBMS_XPLAN.DISPLAY (FORMAT=>'BASIC'));输出---------------------------------------------------------- | Id | Operation | Name | ... 阅读更多
2K+ 阅读量
问题:您的查询在多个表上具有 JOIN 条件,存在性能问题,并且 Oracle 优化器没有选择您想要的连接顺序。解决方案:Oracle 有两个提示,ORDERED 提示和 LEADING 提示,可用于影响查询中使用的连接顺序。ORDERED 提示您正在运行一个 SQL 来连接两个表,student 和 departments,因为您想获取每个学生的部门名称。通过将 ORDERED 提示放入查询中,您可以查看提示如何更改执行访问路径。示例EXPLAIN PLAN FOR SELECT first_name, department_name FROM students e, departments ... 阅读更多