澄清:请看评论区,这里只是本人当初在学习时在网上搜罗的答案,不代表个人观点,请自行判断。
准备用一datetime列存储 登记时间;
1、索引最好建立在重复性较多的列,datetime很明显重复性很少,建立索引有用吗?
2、重复性较少的记录,如果建立索引,是否索引要耗去很多存储空间?
3、如果SQL查询一般是按天来查,是否有必要新增一个date冗余列来存储 登记日期?
4、char(8),date,int都可以存储日期,char和int还有更好的移植性,是这样?
答:
第一个问题,大原则是,只要有直接比较的查询如=,>,<列名这样的,就需要建索引。 第二个问题,存储空间消耗基本是一样的,中间节点的键值多几位标识而已,相对叶子节点的存储空间很小 第三个问题,如果这个查询运行频繁就有必要,同时要对冗余列建索引 第四个问题,可以,但没啥必要,datetime类型提供一系列函数,换成其它类型的话如果用到日期计算功能就要自己写函数了。
补充:3、如果SQL查询一般是按天来查,是否有必要新增一个date冗余列来存储 登记日期? 不需要考虑。如果是按天查 语句应该是这样的. 可以用到索引,请不要使用convert,(会用不到索引)
select * from tb
where (createtime >=‘2014-4-10’ and createtime<‘2014-4-11’)
1、索引最好建立在重复性较多的列,datetime很明显重复性很少,建立索引有用吗? 通常很适合建索引 2、重复性较少的记录,如果建立索引,是否索引要耗去很多存储空间? 大部分情况下不会,重复性越小效率越高 3、如果SQL查询一般是按天来查,是否有必要新增一个date冗余列来存储 登记日期? 可以考虑,日期convert会导致原列上索引无效。 4、char(8),date,int都可以存储日期,char和int还有更好的移植性,是这样? 也不一定,数据类型是约束,除了保证数据的一致性之外,还可以带来很多优势,使用不合适的数据类型将丢失这些优势
山寨DBA 2014-04-10
准备用一datetime列存储 登记时间; 1、索引最好建立在重复性较多的列,datetime很明显重复性很少,建立索引有用吗?—如果你的查询中有用到时间列作为where条件的判断,当然是有必要建所以的了。 2、重复性较少的记录,如果建立索引,是否索引要耗去很多存储空间?—正常情况下,一个包含一列的非聚集索引,所占用的空间大约是表空间的20%–25% ,当然索引越多,肯定占用的空间也就越多了。 3、如果SQL查询一般是按天来查,是否有必要新增一个date冗余列来存储 登记日期? —有必要,其实如果是这样的话,你存储时间的列就直接为date呗,不过如果时间列有其他用处,多建一个冗余也可以。 4、char(8),date,int都可以存储日期,char和int还有更好的移植性,是这样?—关于移植性这个研究的不多,应该是影响不大的吧
参考网址:https://bbs.csdn.net/topics/390755882
另外,union时候如何走索引?
http://www.itpub.net/thread-1783503-1-1.html
最好搞单列索引