以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [讨论] 外部表自动编号的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=120095) |
||||
-- 作者:Mikee -- 发布时间:2018/6/6 22:44:00 -- [讨论] 外部表自动编号的问题 由于数据可以从其他系统导入,所以把自动编号功能做成内部函数,用菜单执行编号的内部函数,将表中未编号的所有记录一次性编号。用的SQL的Select语句,感觉执行效率很低,明显的停顿,是否有更高效的方法? |
||||
-- 作者:Mikee -- 发布时间:2018/6/6 22:48:00 -- 问题应该出在保存数据的那条语句上,但是如果不保存, Select又无法查询到最大编号值。 |
||||
-- 作者:有点甜 -- 发布时间:2018/6/6 22:53:00 -- 每一次执行sql语句都至少耗时0.5秒的,如果你数据越多,耗时自然越多。
如果确实想快,就获取最大值,然后直接累加1编号(多人同时编号的时候,有可能导致重复)。这个时候,就必须要求别的客户端在这个时候不能编号,比如编号之前先判断有没有在编号,没有才能编(查找一个表格数据,判断是否有人编号,比如,如果有人编号,标记为1)
|
||||
-- 作者:Mikee -- 发布时间:2018/6/6 23:05:00 -- 上面的代码,如果把最后一句 DataTables("Orders").save() 注释掉,能看到赋值明显快很多,所以似乎效率最低的应该不是SQL语句而是Save() 但是如果赋值没有保存到外部数据库,所以下次查询不到最大值,结果所有的编号都是一样的。 有没有方法加快或者绕开Save()就能取得最大值?
|
||||
-- 作者:有点甜 -- 发布时间:2018/6/6 23:05:00 -- 或者换一种方式处理
http://www.foxtable.com/webhelp/scr/3008.htm
|
||||
-- 作者:Mikee -- 发布时间:2018/6/6 23:13:00 -- 还没开始尝试服务器端和客户端的应用,所以没看这个帮助。 我试试看吧,多谢甜版! |
||||
-- 作者:有点甜 -- 发布时间:2018/6/7 8:56:00 -- 以下是引用Mikee在2018/6/6 23:05:00的发言:
上面的代码,如果把最后一句 DataTables("Orders").save() 注释掉,能看到赋值明显快很多,所以似乎效率最低的应该不是SQL语句而是Save() 但是如果赋值没有保存到外部数据库,所以下次查询不到最大值,结果所有的编号都是一样的。
有没有方法加快或者绕开Save()就能取得最大值?
如果要save,试试用sql语句
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=103365&skin=0
|
||||
-- 作者:mikee -- 发布时间:2018/6/8 12:11:00 -- 谢谢甜版! 本实例是对批量导入的数据进行自动编号,可以理解为操作时不同项目类型的编号的最大值已经存在了,所以编号前直接查找最大值存储在临时表中,然后具体的记录根据该最大值编号,最后一次性保存, 对比下来速度会提高很多。没有测试大批量数据,有机会再试试更进一步优化。
另外可以考虑加上限制,批量编号的时候锁定表,以避免多人操作重复编号。 |
||||
-- 作者:有点甜 -- 发布时间:2018/6/8 12:33:00 -- 回复8楼,谢谢分享。 |