像这样的sql如何优化
update a set isLatest='N', isHis='Y' where isLatest='Y' and id in (1,2,3,4,5,6,7,8,.....)
明确的说 isLatest isHis都是char(2), 
我现在的想法是 
1建立 索引(isLatest , id)
2将 isLatest isHis改为int 质疑这个有必要吗 按道理整形要比char快很多。
由于整个java工程代码庞大,所以字段类型一改几乎所有的代码都要修改,现在质疑是否 isLatest isHis改为int ?
另外这个索引(isLatest , id)有时候觉得有问题?

解决方案 »

  1.   

    char(2)在存储上所占空间比int要少(int占4个字节)。如果前期在存储字节上占长度相同的情况下,从算法理论上int要比char(4)要快。从你上面的需求看,你的列isLatest的索引选择性比较低(因只有"N"、"Y"两种值),从理论上索引的效果不太明显,另外,你update表时,这过程中还涉及到索引的维护。所以,以上情况建议对id列做索引(如果是唯一值的,则作为主键或唯一索引即可)。具体的效果用 
    explain SQL语句
    跟踪分析吧
      

  2.   

    1建立 索引(isLatest , id)不如建 (id,islateset) 比较合理。
      

  3.   

    表结构最好不要改 不过你可以添加一个字段 int类型的标记该isLatest是Y和N