繁体   English   中英

在这种情况下,如何有效地编写sql查询?

[英]How to write sql query efficiently in this case?

我有一张桌子,列出学生及其排名。

像这样

studentName, studentRank

现在,在我的UI客户端中,我在按学生排名排序的列表框中显示所有学生的列表。

[ StudentName, StudentRank] 

现在,该用户界面中的教授可以按自己的意愿拖放学生并对其进行重新排序,然后“保存”

保存时,我需要从ListBox中获取列表,然后在表上进行更新,以便现在根据UI中的列表对学生进行排名。

为此,我现在最简单的方法是删除所有先前的行,然后通过在学生表中的每次插入之后增加排名来将它们逐一插入。 我觉得这是不必要的...。但不确定。

我想知道是否有更好的方法来实现这一目标?

如果您担心最小化数据库更改,则可以跟踪哪些行具有更改的等级,并且仅对此进行更新。 是否值得,取决于数据的规模以及将产生多少日志(如果有)。

例如,如果您有十个学生并且交换等级5和6,则最小更新仅影响2行,而默认的删除和添加要求10个删除和10个插入。 如果您改为将学生从排名8提升到排名5,您会有更多更新,但仍然更少:

UPDATE student SET rank = rank + 1 WHERE ranking BETWEEN 5 AND 7
UPDATE student SET rank = 5 WHERE name = @name

但是确定最佳的SQL很复杂,可能不值得付出努力。 最好只更新更改的行。

如果确实要删除并重新插入,则可能要截断而不是删除。 并在事务中执行此操作,以确保删除确实有效,然后插入失败。

包括在您的表格字段中,例如studentid,然后按studentid运行update,这样做会更快,然后一遍又一遍地删除和插入数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM