面试小计

http://blog.csdn.net/chentao5211314/article/details/5955751


3.保留重复数据中最新的一条记录
在Oracle中,rowid是隐藏字段,用来唯一标识每条记录。所以,只要保留重复数据中rowid最大的一条记录就可以了。  
查询重复数据:
select a.rowid,a.* from 表名 a
where a.rowid != (
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and a.字段2 = b.字段2 );   
例:selete from dba_tables a
where a.rowid!=(
select max(rowid) from test b
where a.owner=b.owner);
  删除重复数据,只保留最新的一条数据:
delete from 表名 a
where a.rowid != (
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and a.字段2 = b.字段2 )
  使用临时表实现高效查询
create table 临时表 as
(select a.字段1, a.字段2, MAX(a.ROWID) as dataid from 正式表 a
GROUP BY a.字段1,a.字段2);
delete from 表名 a
where a.rowid !=
( select b.dataid from 临时表 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2 );
commit;

DELETE t FROM (
  SELECT RESOURCE_ID, COLUMN_ID,MIN(column_ref_RESOURCE_ID) minvalue FROM T_RES_COLUMN_MAP
   GROUP BY RESOURCE_ID, COLUMN_ID
  HAVING COUNT(*)>1
) a
   INNER JOIN T_RES_COLUMN_MAP t ON a.RESOURCE_ID=t.RESOURCE_ID
                AND a.COLUMN_ID=t.COLUMN_ID
               AND t.column_ref_RESOURCE_ID>minvalue

DELETE T_RES_COLUMN_MAP
 where rowid in (select rid
                   from (select map.rowid rid,
                                row_number() over(partition by RESOURCE_ID, COLUMN_ID order by resource_rank) rn
                           from T_RES_COLUMN_MAP map)
                  where rn > 1);

http://meipeng1114-163-com.iteye.com/blog/807015
 ③String是一个比较特殊的数据类型,在Java中,String是一个类,但是他的传值却是采用“值传递”的方式。
首先String不属于8种基本数据类型,String是一个对象。
      因为对象的默认值是null,所以String的默认值也是null;但它又是一种非凡的对象,有其它对象没有的一些特性。
      new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;
      String str=”kvill”;
      String str=new String (“kvill”);的区别。


http://www.cnblogs.com/xiangshu/articles/2054447.html
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All

 两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);

如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。


Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

数据库表设计中使用横向表切割来降低并发冲突 

[java] view plaincopyprint?

  1. package cn.sh.webfile.model;  
  2. import java.io.Serializable;  
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.Id;  
  6. import javax.persistence.OneToOne;  
  7. import javax.persistence.PrimaryKeyJoinColumn;  
  8. import javax.persistence.Table;  
  9. import javax.persistence.Version;  
  10. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
  11. /** 
  12. 开始于 2010-06-09 
  13. 文件标签符号表的模型 
  14. * [2010-06-18]新增加一个字段 
  15. * [2010-06-21]根据应用程序的使用反馈,把引用计数、点击计数字段,放入两个不同的表 
  16. 以实现更好的多工状态下的并发操作,减少状态冲突。分拆理由,表《文件标签》主表、《文件标签引用计数》、 
  17. 《文件标签点击计数》作为从表,主表变化慢,从表变化快。 
  18. 最后修改于 2010-06-21 
  19. * @author 万继斌 
  20. * @version 1.3 
  21. */  
  22. @Entity  
  23. @Table(name = "文件标签")  
  24. public class FileTagModel implements Serializable {  
  25. /** 
  26. 使用javaUUID唯一号,36长度的字符串 
  27. */  
  28. @Id  
  29. @Column(name = "主键")  
  30. private String id;  
  31. /** 
  32. 标签名称 
  33. */  
  34. @Column(name = "标签名称")  
  35. private String tagName;  
  36. /** 
  37. 标签排序 
  38. */  
  39. @Column(name = "标签排序")  
  40. private int px;  
  41. /** 
  42. 主观权重 
  43. */  
  44. @Column(name = "主观权重")  
  45. private boolean tagWeight;  
  46. /** 
  47. 主观推荐 
  48. */  
  49. @Column(name = "主观推荐")  
  50. private boolean tagSuggest;  
  51. /** 
  52. 实体创建时的时间戳 
  53. */  
  54. @Column(name = "时间戳")  
  55. private long timestamp;  
  56. /** 
  57. 实体对象的版本号 
  58. */  
  59. @Column(name = "版本号")  
  60. @Version  
  61. private int version;  
  62. /** 
  63. 点击计数 
  64. */  
  65. @Column(name = "点击计数")  
  66. private int clickCount;  
  67. /** 
  68. 引用计数 
  69. */  
  70. @Column(name = "引用计数")  
  71. private int quoteCount;  

}  

主键:char(36)

标签名称:varchar(50)

标签排序:int

主观权重:bit

主观推荐:bit

时间戳:bigint

版本号:int

引用计数:int

点击计数:int

 

 

 

经过一段时间的测试后发现,文件标签表中,各个字段的的变化速度有很大的不同,其中引用计数、点击计数、变化很频繁,而其它字段的内容相对变化就比较稳定,一旦生成,相对比较稳定,这样在并发程度高时,常常导致数据更新冲突,虽然可以通过@version注解可以保证数据的乐观锁定发生作用,数据的一致性不被破坏。但是由于把变化频度差异很大的字段放在同一张表上,导致冲突发生的概率增大,降低了系统的效能。

 

《文件标签》表实体Bean

 

[java] view plaincopyprint?

 

  1. package cn.sh.webfile.model;  
  2. import java.io.Serializable;  
  3. import javax.persistence.Column;  
  4. import javax.persistence.Entity;  
  5. import javax.persistence.Id;  
  6. import javax.persistence.OneToOne;  
  7. import javax.persistence.PrimaryKeyJoinColumn;  
  8. import javax.persistence.Table;  
  9. import javax.persistence.Version;  
  10. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
  11. /** 
  12. 开始于 2010-06-09 
  13. 文件标签符号表的模型 
  14. * [2010-06-18]新增加一个字段 
  15. * [2010-06-21]根据应用程序的使用反馈,把引用计数、点击计数字段,放入两个不同的表 
  16. 以实现更好的多工状态下的并发操作,减少状态冲突。分拆理由,表《文件标签》主表、《文件标签引用计数》、 
  17. 《文件标签点击计数》作为从表,主表变化慢,从表变化快。 
  18. 最后修改于 2010-06-21 
  19. * @author 万继斌 
  20. * @version 1.3 
  21. */  
  22. @Entity  
  23. @Table(name = "文件标签")  
  24. public class FileTagModel implements Serializable {  
  25. /** 
  26. 使用javaUUID唯一号,36长度的字符串 
  27. */  
  28. @Id  
  29. @Column(name = "主键")  
  30. private String id;  
  31. /** 
  32. 标签名称 
  33. */  
  34. @Column(name = "标签名称")  
  35. private String tagName;  
  36. /** 
  37. 标签排序 
  38. */  
  39. @Column(name = "标签排序")  
  40. private int px;  
  41. /** 
  42. 主观权重 
  43. */  
  44. @Column(name = "主观权重")  
  45. private boolean tagWeight;  
  46. /** 
  47. 主观推荐 
  48. */  
  49. @Column(name = "主观推荐")  
  50. private boolean tagSuggest;  
  51. /** 
  52. 实体创建时的时间戳 
  53. */  
  54. @Column(name = "时间戳")  
  55. private long timestamp;  
  56. /** 
  57. 实体对象的版本号 
  58. */  
  59. @Column(name = "版本号")  
  60. @Version  
  61. private int version;  
  62. /** 
  63. 点击计数 
  64. */  
  65. @OneToOne  
  66. @PrimaryKeyJoinColumn  
  67. private FileTagClickCountModel clickCount;  
  68. /** 
  69. 引用计数 
  70. */  
  71. @OneToOne  
  72. @PrimaryKeyJoinColumn  
  73. private FileTagQuoteCountModel quoteCount;  
  74. }  

     

    《文件标签引用计数》表实体Bean

    [java] view plaincopyprint?

    1. package cn.sh.webfile.model;  
    2. import java.io.Serializable;  
    3. import javax.persistence.Column;  
    4. import javax.persistence.Entity;  
    5. import javax.persistence.Id;  
    6. import javax.persistence.Table;  
    7. import javax.persistence.Version;  
    8. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
    9. /** 
    10. 开始于 2010-06-21 
    11. 文件标签引用计数表的模型 
    12. 《文件标签引用计数》作为从表,主表变化慢,从表变化快。 
    13. 最后修改于 2010-06-21 
    14. * @author 万继斌 
    15. * @version 1.0 
    16. */  
    17. @Entity  
    18. @Table(name = "文件标签引用计数")  
    19. public class FileTagQuoteCountModel implements Serializable {  
    20. /** 
    21. 使用javaUUID唯一号,36长度的字符串 
    22. */  
    23. @Id  
    24. @Column(name = "主键")  
    25. private String id;  
    26. /** 
    27. 引用计数 
    28. */  
    29. @Column(name = "引用计数")  
    30. private int count;  
    31. /** 
    32. 实体创建时的时间戳 
    33. */  
    34. @Column(name = "时间戳")  
    35. private long timestamp;  
    36. /** 
    37. 实体对象的版本号 
    38. */  
    39. @Column(name = "版本号")  
    40. @Version  
    41. private int version;  
    42. }  

       

      《文件标签点击计数》表实体Bean

      [java] view plaincopyprint?

      1. package cn.sh.webfile.model;  
      2. import java.io.Serializable;  
      3. import javax.persistence.Column;  
      4. import javax.persistence.Entity;  
      5. import javax.persistence.Id;  
      6. import javax.persistence.Table;  
      7. import javax.persistence.Version;  
      8. import org.apache.commons.lang.builder.ReflectionToStringBuilder;  
      9. /** 
      10. 开始于 2010-06-21 
      11. 文件标签点击计数表的模型 
      12. 《文件标签点击计数》变化较快的表。 
      13. 最后修改于 2010-06-21 
      14. * @author 万继斌 
      15. * @version 1.0 
      16. */  
      17. @Entity  
      18. @Table(name = "文件标签点击计数")  
      19. public class FileTagClickCountModel implements Serializable {  
      20. /** 
      21. 使用javaUUID唯一号,36长度的字符串 
      22. */  
      23. @Id  
      24. @Column(name = "主键")  
      25. private String id;  
      26. /** 
      27. 点击计数 
      28. */  
      29. @Column(name = "点击计数")  
      30. private int count;  
      31. /** 
      32. 实体创建时的时间戳 
      33. */  
      34. @Column(name = "时间戳")  
      35. private long timestamp;  
      36. /** 
      37. 实体对象的版本号 
      38. */  
      39. @Column(name = "版本号")  
      40. @Version  
      41. private int version;  
      42. }

《文件标签》表结构

主键:char(36)

标签名称:varchar(50)

标签排序:int

主观权重:bit

主观推荐:bit

时间戳:bigint

版本号:int

 

《文件标签引用计数》表结构

主键:char(36)

引用计数:int

时间戳:bigint

版本号:int

 

《文件标签点击计数》表结构

主键:char(36)

点击计数:int

时间戳:bigint

版本号:int

 

经过实地测试,并发效能大大提高,而通过对主表的分割,而导致的连接操作带来的速度损失相对较小,某些方面还可以增大综合读写速度。

 

原文地址:https://www.cnblogs.com/shz365/p/3799142.html