当前位置:  数据库>其它
本页文章导读:
    ▪SQL SERVER 2008 集群添加存储       准备工作 1. 按照需求划分RaidGroup和LUN 2. 在存储管理界面中将新划分的LUN分配给相应服务器 3.在服务器上建新的LUN联机并格式化 4.给每个LUN分配卷名 将LUN添加进集群 1. 打开故障转移群.........
    ▪sql优化(查询条件的变化对执行计划的影响)          今天在工作中统计一个数据,最开始比较顺利的执行完了sql,但后来用户稍稍调整了需求,本来我以为增加一个查询条件就可以搞定的事情,结果执行了二十多分钟才出结果。.........
    ▪jdbc之使用占位符的增删改查       package com.hanchao.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * jdbc学习总结二 * @author hanlw * 2012-07-09 */ public class TestJdbcNew {    .........

[1]SQL SERVER 2008 集群添加存储
    来源: 互联网  发布时间: 2013-11-07

 准备工作

1. 按照需求划分RaidGroup和LUN

2. 在存储管理界面中将新划分的LUN分配给相应服务器

3.在服务器上建新的LUN联机并格式化

4.给每个LUN分配卷名

将LUN添加进集群

1. 打开故障转移群集管理器,选择存储,点击添加磁盘,将查找到的磁盘选中,然后确定。

2. 将磁盘分配给实例(此步骤建议先将服务脱机)。

   服务和应用程序,选中一个SQL Server服务,在操作栏中点击添加存储。

 

3. 选择想分配给这个实例的磁盘,确认

 

4. 修改依赖关系

      选择一个SQL Server服务,在其它资源中双击SQL Server服务,出现属性窗口,选择依赖关系--插入

5. 切换及做一些必要的验证

作者:alex_198208 发表于2013-1-9 14:40:04 原文链接
阅读:3 评论:0 查看评论

    
[2]sql优化(查询条件的变化对执行计划的影响)
    来源: 互联网  发布时间: 2013-11-07

    今天在工作中统计一个数据,最开始比较顺利的执行完了sql,但后来用户稍稍调整了需求,本来我以为增加一个查询条件就可以搞定的事情,结果执行了二十多分钟才出结果。后来我查看了下执行计划,发现前后两个sql的执行计划有变化。

    这两个SQL分别为:

SELECT T.YEARID, SUM(T.EXPORTSUM)
  FROM STDW.F_CUSTOM_EXPORTDETAIL T,
       (SELECT A.ZONE, A.ZONE_NAME
          FROM STDW.D_CUSTOM_PROVINCE_ZONE   A,
               STDW.D_CUSTOM_BRANCH_PROVINCE B
         WHERE A.PROVINCE_NO = B.PROVICEID
           AND B.CORPID = 4400) T2
 WHERE T.CITYNO = T2.ZONE
   AND (T.CUSTOMCODE8 LIKE '03061%' OR T.CUSTOMCODE8 LIKE '03%' OR
       (T.CUSTOMCODE8 LIKE '16%' AND T.CUSTOMCODE8 NOT LIKE '1601%' AND
       T.CUSTOMCODE8 NOT LIKE '1602%'))
   AND T.YEARID BETWEEN 2010 AND 2012
 GROUP BY T.YEARID
SELECT T.YEARID, SUM(T.EXPORTSUM)
  FROM STDW.F_CUSTOM_EXPORTDETAIL T,
       (SELECT A.ZONE, A.ZONE_NAME
          FROM STDW.D_CUSTOM_PROVINCE_ZONE   A,
               STDW.D_CUSTOM_BRANCH_PROVINCE B
         WHERE A.PROVINCE_NO = B.PROVICEID
           AND B.CORPID = 4400
           AND B.PROVICEID = 44) T2
 WHERE T.CITYNO = T2.ZONE
   AND (T.CUSTOMCODE8 LIKE '03061%' OR T.CUSTOMCODE8 LIKE '03%' OR
       (T.CUSTOMCODE8 LIKE '16%' AND T.CUSTOMCODE8 NOT LIKE '1601%' AND
       T.CUSTOMCODE8 NOT LIKE '1602%'))
   AND T.YEARID BETWEEN 2010 AND 2012
 GROUP BY T.YEARID


    第一个SQL的执行计划为:

    第二个SQL执行计划为:

    这里需要说明一下背景,表F_CUSTOM_EXPORTDETAIL是一个按年进行分区的表,每个分区下都是千万级别以上的数据量,差不多都是三、四千万的数据量。对于表D_CUSTOM_BRANCH_PROVINCE,CORPID字段为4400的数据有两条,PROVICEID字段为44的数据只有一条。

    在第一次只限制CORPID=4400时,SQL执行时间差不多2分钟(毕竟表F_CUSTOM_EXPORTDETAIL较大),看执行计划还比较合理。但在第二次再增加限制条件"B.PROVICEID = 44"后,SQL执行时间明显变长,差不多要20多分钟。通过分析这两个SQL的执行计划,发现第二条SQL的执行计划有变化:表的连接方式变成了NESTED LOOPS。如果表数据量大的时候,这种方式是比较耗时的。

    之前遇到的情况是相同的SQL,相隔一段时间后执行计划发生了变化,原因在于统计信息没有及时收集,解决方案是利用了oralce的hint。但这次和之前的情况不太一样,毕竟SQL不太一样,且这两条SQL的执行计划都是固定的。为了摸清根源,这次没有利用hint,而是去分析了第二条SQL。

    前面也提到,增加了条件"B.PROVICEID = 44"后,D_CUSTOM_BRANCH_PROVINCE只有一条记录,这是ORACLE会自作聪明的进行使用NESTED LOOPS表连接方式,实际上也是有道理的,但是因为最后关联的表F_CUSTOM_EXPORTDETAIL数据量过大,才导致执行效率低下。在这种情况下比较好的办法是使用HASH JOIN表连接方式,怎么样才能做到呢?根据前面的分析,我们应该首先考虑到破除只有一条记录这种可能。分析第二条SQL里面的子查询:

SELECT A.ZONE, A.ZONE_NAME
          FROM STDW.D_CUSTOM_PROVINCE_ZONE   A,
               STDW.D_CUSTOM_BRANCH_PROVINCE B
         WHERE A.PROVINCE_NO = B.PROVICEID
           AND B.CORPID = 4400
           AND B.PROVICEID = 44

    由于D_CUSTOM_BRANCH_PROVINCE限制条件后只有一条记录,且D_CUSTOM_PROVINCE_ZONE和该表进行关联时用到了PROVICEID,那我们可以不用D_CUSTOM_BRANCH_PROVINCE,直接限制表D_CUSTOM_PROVINCE_ZONE的条件,如下:

SELECT A.ZONE, A.ZONE_NAME
          FROM STDW.D_CUSTOM_PROVINCE_ZONE A
         WHERE A.PROVINCE_NO = 44

    这下就完全和表D_CUSTOM_BRANCH_PROVINCE脱离了干系,但实际效果是一样的。

    最后SQL修改为:

SELECT T.YEARID 年份, SUM(T.EXPORTSUM) 出口金额
  FROM STDW.F_CUSTOM_EXPORTDETAIL T,
       (SELECT A.ZONE, A.ZONE_NAME
          FROM STDW.D_CUSTOM_PROVINCE_ZONE A
         WHERE A.PROVINCE_NO = 44) T2
 WHERE T.CITYNO = T2.ZONE
   AND (T.CUSTOMCODE8 LIKE '03061%' OR T.CUSTOMCODE8 LIKE '03%' OR
       (T.CUSTOMCODE8 LIKE '16%' AND T.CUSTOMCODE8 NOT LIKE '1601%' AND
       T.CUSTOMCODE8 NOT LIKE '1602%'))
   AND T.YEARID BETWEEN 2010 AND 2012
 GROUP BY T.YEARID

    执行计划为:


    这下执行SQL又只要2分钟左右了。

    总结:

    1、理论上来说可选择性越高,SQL执行效率越高,但也要分情况:如果查询的结果只有一条了,可能会影响到表之间的关联方式,导致执行效率低下。

    2、查看执行计划时要多注意表之间的连接方式,而且要多想想ORACLE为什么要采用此方式,这样有助于解决问题。

作者:duwenchao1986 发表于2013-1-9 16:21:36 原文链接
阅读:51 评论:0 查看评论

    
[3]jdbc之使用占位符的增删改查
    来源: 互联网  发布时间: 2013-11-07
  • package com.hanchao.jdbc;
  • import java.sql.Connection;
  • import java.sql.DriverManager;
  • import java.sql.PreparedStatement;
  • import java.sql.ResultSet;
  • /**
  • * jdbc学习总结二
  • * @author hanlw
  • * 2012-07-09
  • */
  • public class TestJdbcNew {
  •     /**
  •      * 上一篇文章,我们对JDBC有了初步的了解,并且知道了如何使用JDBC了。
  •      * 但是,那只是JDBC的了解性操作实例。实际开发中,我们是不能那么玩的!!
  •      *
  •      * ★下面我们学习一下:JDBC的占位符的使用,以后写程序建议都要这么玩的!!
  •      *
  •      * 注意事项:我们的异常应该捕获;而不是抛出来啊!!
  •      *
  •      * SQLException是非运行时异常,必须要捕获或者向上抛出!!★
  •      */
  •     
  •     public static void main(String[] args) throws Exception {
  •         /**
  •          * 1.jdbc对Mysql的insert操作
  •          */
  • //      insert("cherry","shanghai");
  •         
  •         /**
  •          * 2.jdbc对mysql的update操作
  •          */
  • //      update("update",12);
  •         
  •         /**
  •          * 3.jdbc对mysql的delete操作
  •          */
  • //      delete(12);
  •         
  •         /**
  •          * 4.jdbc对mysql的retrieve 操作
  •          */
  •         retrieve(15);
  •     }
  •     
  •     /**
  •      * jdbc对mysql的insert操作
  •      *
  •      * @param username 用户名
  •      * @param address 地址
  •      */
  •     public static void insert(String username,String address) throws Exception {
  •         Class.forName("com.mysql.jdbc.Driver");
  •         Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
  •         
  •         //注意下面几行★
  •         String sql = "insert into t_user(username,address) values(?,?)"; //★
  •         PreparedStatement sta = con.prepareStatement(sql);
  •         sta.setString(1, username);
  •         sta.setString(2, address);
  •         
  •         int rows = sta.executeUpdate();
  •         if(rows > 0) {
  •             System.out.println("operate successfully!");
  •         }
  •         sta.close();
  •         con.close();
  •     }
  •     
  •     /**
  •      * jdbc对mysql的update操作
  •      *
  •      * @param address 地址
  •      * @param id 主键值
  •      * @throws Exception
  •      */
  •     public static void update(String address,int id) throws Exception {
  •         Class.forName("com.mysql.jdbc.Driver");
  •         Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb","root","root");
  •         
  •         //★注意下面几行代码
  •         String sql  = "
        
  • 最新技术文章:
    ▪gc buffer busy/gcs log flush sync与log file sync    ▪让你的PL/SQL更好用    ▪ADO.NET中的非脱机数据库查询
    ▪参数job_queue_processes与Oracle jobs    ▪11gR2游标共享新特性带来的一些问题以及_cursor...    ▪_library_cache_advice和latch:shared pool、latch:shared poo...
    ▪SQL: Date Utility    ▪DB2 分区表增加分区    ▪DB2第一步 — 创建表
    ▪oracle 数据库    ▪插入10万条记录测试    ▪rebuild index VS. rebuild index online
    ▪如何处理undo tablespace 表空间太大的问题    ▪ado执行存储过程中包含结果集获取输出参数为...    ▪oracle函数的demo
    ▪Entity Framework 学习建议及自学资源    ▪存储过程的编写    ▪Linux/Unix shell 自动发送AWR report(二)
    ▪第二章 Oracle恢复内部原理(基础数据结构)    ▪Redis源码学习之【Tcp Socket封装】    ▪Java Jdbc减少与Oracle之间交互提升批量处理性能...
    ▪南大通用GBase8a Vs Oracle11g 单机测试亲测    ▪oracle 中行列转换    ▪rhel下安装oracle10g+asm---测试环境搭建
    ▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log iis7站长之家
    ▪测试人员的SQL语言 系列    ▪SQL数据库基本语句    ▪MySQL Replication常见错误整理[持续更新...]
    ▪eclipse下建立esper的demo    ▪把oracle rac 转化为单机数据库    ▪Redis系列-存储篇sorted set主要操作函数小结
    ▪基本的SQL*Plus报表和命令    ▪druid简单教程    ▪11g调度--scheduler使用
    ▪EF基础一    ▪db2存储过程中循环语句while do的continue有没有...    ▪oracle 创建DBLINK
    ▪DB2数据库备份还原    ▪Warning: prerequisite DBD::mysql 1 not found错误解决方...    ▪innotop性能监视mysql,innodb工具
    ▪数据迁移:DataGuard配置    ▪QX项目实战-19.跨库数据同步    ▪Mysql EXPLAIN
    ▪Oracle 11g AWR 系列七:Active Session History (ASH) 报...    ▪Oracle 11G新特性(共36个)    ▪父子节点问题
    ▪OEM简介及按钮乱码问题    ▪NoSql之MongoDB的常用类管理    ▪ORA-39700: database must be opened with UPGRADE option
    ▪node.js 访问redis数据库,pub/sub    ▪使用DBMS_REDEFINITION在线重定义分区表    ▪SQL Developer 使用问题与解决方法汇总
    ▪oralce 11g dataguard 概念    ▪ORA-30004 错误处理    ▪oracle分组函数rollup,cube
    ▪Sql Developer 使用问题与解决方法汇总    ▪Configure Oracle Dataguard Primary-ASM to Physical-ASM    ▪Oracle Data Guard 理论知识
    ▪Control File 恢复    ▪Oracle数据文件收缩    ▪Oracle 11g AWR 系列五:如何生成 AWR 报告?
    ▪Wireshark数据包分析实战(第2版)    ▪MySql用户权限控制    ▪db2和oracle查询序列区别
    ▪更新blob字段的存储过程    ▪MySQLReport分析报告三    ▪DB2中的序列
    ▪Oracle中DBMS_RANDOM.STRING 的用法    ▪SQL SERVER无法安装成功,sqlstp.log文件提示[未发...    ▪Data Guard 部署物理备库的 10 大注意事项
    ▪万能数据库查询分析器使用技巧之(九)    ▪SQL 自定义Split函数    ▪视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的...
    ▪Data Guard Standby_archive_dest 和 Log_archive_dest_n 的...    ▪机房收费系统数据库设计(一)    ▪利用putty的SSH tunnel连接Oracle
    ▪DBCA建库偶遇ORA-27125    ▪使用PowerPivot建立简单的分析模型    ▪Linux/Unix shell 自动发送AWR report
    ▪写入到blob字段的存储过程    ▪关于JDBC中ResultSet接口的一点细节探究    ▪Data Guard 配置 Standby Redo Log
    ▪linux下redis的安装    ▪windows下redis的安装    ▪手动创建数据库步骤(简单翻译官方文档)
    ▪Ubuntu安装Mongodb    ▪SQL CLR应用    ▪redis的配置文件参数--详细说明
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3