一直有纠结过一个问题,不知道其他同学有没有,实际开发中数据库字段类型varchar类型是最好用的,不会出现类型不符的异常;管它是int类型还是double、date类型都能当字符占用类型存储。
这真的是一个“坏味道”要改一改了:
1、从字段类型的执行效率上,int最高,varchar最低。
例如状态类型字段,使用char或者varchar是不可取的,int类型更容易建立索引和进行检索,毕竟数字类型是数据库检索的基础,char类型的毕竟需要经过转换,而varchar就更复杂了,其排序不仅需要转换和计算,还需要访问和遵循数据库的排序规则(实际上char也需要排序规则),而消耗的资源也更大。
2、占用空间大小不同
例如用varchar 来存储年月日,那么需要10个字节,而date类型只需4个字节,而datetime类型也只需要8个字节,都小于varchar类型
3、建立索引问题
频繁改动的字段类型建议使用varchar。varchar类型的字段用来建立索引容易产生的索引碎片
简单理解索引碎片是空间利用率不足
SQL索引与碎片
=>删除索引并重建
这种方式并不好.在删除索引期间,索引不可用.会导致阻塞发生。而对于删除聚集索引,则会导致对应的非聚集索引重建两次(删除时重建,建立时再重建).虽然这种方法并不好,但是对于索引的整理最为有效
=>使用DROP_EXISTING语句重建索引
为了避免重建两次索引,使用DROP_EXISTING语句重建索引,因为这个语句是原子性的,不会导致非聚集索引重建两次,但同样的,这种方式也会造成阻塞
=>如前面文章所示,使用ALTER INDEX REBUILD语句重建索引
使用这个语句同样也是重建索引,但是通过动态重建索引而不需要卸载并重建索引.是优于前两种方法的,但依旧会造成阻塞。可以通过ONLINE关键字减少锁,但会造成重建时间加长.
评论 (0)