我有一个表有800多万数据,里面有七八个字段,现在对于[Name]字段进行模糊查询,发现如果用like查询,很慢,用contains查询,返回的数据如果少,会快,多就会很慢,目前每个字段已经建立了索引
需求是在这里面找,如果返回的结果超过1000个,那就只取前1000个,否则有多少显示多少
数据分区有效果不?
需求是在这里面找,如果返回的结果超过1000个,那就只取前1000个,否则有多少显示多少
数据分区有效果不?
--有点像分页,每次在固定的行数内查询
--如果满足LIKE条件的数据行很多,而且集中在表的前面,则这种方法很快
--如果满足LIKE条件的行数少於1000行或者都是集中表的后部,那么这种方法必须要遍历全表。SELECT TOP 1001 * INTO #tmp
FROM (
SELECT TOP 2000 * FROM TB
) t
WHERE [NAME] LIKE '%xxx%'
IF @@ROWCOUNT<1000 --如果有必要这里可以做成WHILE循环
BEGIN
---进行下一次搜索
INSERT INTO #tmp
SELECT TOP 1001 *
FROM (
SELECT TOP 2000 * FROM TB WHERE 主键 Between 2001 AND 4001
) t
WHERE [NAME] LIKE '%xxx%'ENDSELECT * FROM #tmp
--这种方式值得考究,
--有必要在每个字段中建立索引么,你这个表是否会涉及到更新(包括新增和修改),
--如果是这样的话,数据的更新速度怎样?
--只需要对频繁查询的数据列建立索引即可,
--如你的Name列,
数据分区有效果不?
--800W,完全可以分区了,
--分区的效果应该是很明显的,
--否则,MS也不会花这么多精力把Oracle的分区表搬到SQL Server来.