1.获取数据库中的表

一.  BloB和Text

1. 合成索引
  合成索引可以提高大文本字段BLOB和Text的查询性能,
合成索引是在表中增加一个字段存放散列值,这种技术只能用于精确匹配的查询,可以使用md5()或sha1,crc23()
来生成散列值, 数值型散列值可以提高存储效率 。下面演示下

--    hash_value字段用来存储散列值
CREATE TABLE t(id VARCHAR(100),context BLOB, hash_value VARCHAR(40))

--  插入数据  存放MD5散列值
INSERT INTO t VALUES(1, REPEAT('beijing',2),MD5(context));
INSERT INTO t VALUES(2, REPEAT('beijing',2),MD5(context));
INSERT INTO t VALUES(3, REPEAT('beijing 2008',2),MD5(context));

SELECT * FROM t;

图片 1

--  查询context值为 beijing 2008的记录,通过散列值来查询
SELECT * FROM t WHERE hash_value=MD5(REPEAT('beijing 2008',2));

图片 2

  上面展示了合成索引的用法,这种技术只用于精确匹配,在一定程度上减少i/0,提高查询效率,如果要使用模糊查询,可以考虑使用前缀索引。

2. 前缀索引

--  创建前缀索引,为字段前N个字符创建索引。这里是前100个字符进行模糊查询
CREATE INDEX idx_blob ON  t(context(100))
-- 查看是否用到前缀索引
 DESC SELECT * FROM t WHERE context LIKE 'beiing%0'

图片 3

  总结:
可以考虑把blob和text列移动到第二张数据表中,把原数据表的数据列转换为固定长度的数据行格式,减少碎片。

1 ;with cte as 
2 (
3     select * from Associator where No = 'mc1007'
4     union all
5     select air.* from Associator as air inner join cte on air.ParentNo = cte.No
6 )
7 select * from cte;
select name from sysobjects where type='U'

二. 浮点数与定点数 

  浮点数一般用于含有小数部分的数值,当数据的精度超过该列定义的实际精度时,则插入值被四舍五入到实际定义的精度值。在mysql中
float,double(或real)用来表示。
  定点数则是以字符串形式存放的。当数据的精度超过该列定义的实际精度时,则mysql会警告(默认的sqlmode),但也是按照四舍五入。如果sqlmode
是在传统模式下则会报错,在mysql中 deciaml或(numberic)用来表示。

--  下面看下浮点数与定点数的区别
CREATE TABLE test(c1 FLOAT(10,2),c2 DECIMAL(10,2))
INSERT INTO test VALUES(131072.32,131072.32)
SELECT * FROM test;

图片 4

  从上面的例子看出c1列插入131072.32值,实际变成了131072.31值。这是由于单精度浮点数表示时产生了误差,在精度要求高的应用中(比如货币)要使用定点数。

图片 5

2.获取表字段(此处是Route表)

 

Select name from syscolumns Where ID=OBJECT_ID('Route')

3.获取表中字段的描述

SELECT   value  FROM   ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'Route', 'column', default)

发表评论

电子邮件地址不会被公开。 必填项已用*标注