sqlserver 一个列上有多行重复数据 请问如何优化

xeppp 2011-05-23 02:36:36
例 如 一个表上 有 学生ID,学生姓名,教师姓名 等等

这个表上总是按照教师姓名 去查询 但是 教师名称有重复数据 一百万行 里有 一万是重复的 请问怎么优化呢?
...全文
235 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sql_xeppp 2011-05-23
  • 打赏
  • 举报
回复
刚才试了下 两个千万行级表 关联 操作 就是几秒 没有想像那么慢
xeppp 2011-05-23
  • 打赏
  • 举报
回复
试想一下 查询这个教师下的所有学生 select student_id,student_name from t where teacher_name = '李老师' 我加上索引了 看执行计划 走的 聚集索引 没走教师的索引
-晴天 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xeppp 的回复:]
我也是后期才接手的 现在代码 都完成了 木已成舟了 只能做优化 只是想问问 这种方式 怎么样能提高效率
[/Quote]
1.对教师姓名列建索引
2.用 distinct 查询.
xeppp 2011-05-23
  • 打赏
  • 举报
回复
我也是后期才接手的 现在代码 都完成了 木已成舟了 只能做优化 只是想问问 这种方式 怎么样能提高效率
-晴天 2011-05-23
  • 打赏
  • 举报
回复
数据重复不正常,冗余太多.你应该从数据库设计基础入手,貌似你这个表的设计不符合3NF.
xeppp 2011-05-23
  • 打赏
  • 举报
回复
呵呵 数据重复是正常的
_风中的落叶 2011-05-23
  • 打赏
  • 举报
回复
看错了。。
_风中的落叶 2011-05-23
  • 打赏
  • 举报
回复
测试前可先备份表
select * into x from 表
要删除多余的行数可按下列步骤执行
alter table 表 add zid int identity(1,1)
delete 表 where zid not in(
select max(zID) from 表 group by 学生ID,学生姓名,教师姓名
having count(*)>1
) and zid not in (select max(zID) from 表 group by 学生ID,学生姓名,教师姓名
having count(*)=1)
alter table 表 drop column zID
xeppp 2011-05-23
  • 打赏
  • 举报
回复
事情是这样的 三个千万行级别的表关联 前台拼sql 拼出where 条件 后台 把 3个表 甚至更多表关联 查询出数据 现在一查就死 根本出不来数据
xeppp 2011-05-23
  • 打赏
  • 举报
回复
不太好吧 索引都是对那些重复数据少的列 这样重复数据这么多 适合么?
打一壶酱油 2011-05-23
  • 打赏
  • 举报
回复
嗯,在教师名上建个索引
GameWong 2011-05-23
  • 打赏
  • 举报
回复
正常啊。优化什么??
pt1314917 2011-05-23
  • 打赏
  • 举报
回复
给教师姓名增加索引

create index index_name on 表(教师姓名字段)

22,297

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧