查单个表 select count(*) from tablename; 查所有表 SELECT object_name (i.id) TableName, rows as RowCnt FROM sysindexes i INNER JOIN sysObjects o ON (o.id = i.id AND o.xType = 'U ') WHERE indid < 2 ORDER BY TableName
根据你说的需求: "可程序中需要查询每行的所有数据"、“查询全部九百万条数据” ------------------------------- 这样的需求跟索引没有关系了(因为已经肯定是走全表扫描的了),要提高效率的办法就是:1、提高硬盘的io速度;2、增加内存以使sql server有更多的缓存。 另外,你程序不要一次性取那么多数据返回,这样会拖死的,建议你考虑变换下处理逻辑(如:分批取回--可以根据id列值进行分批;将数据直接在服务端存成文本再传回本地处理)。 "而是需要根据这些数据逐一进行其他功能的操作,这款程序是不联网的" -------------------------------- 就算这样的话,也不能一次性把9百万数据一次性取回,如果你非要取出来再操作的话,那你得考虑分批去取。或者你把处理逻辑写在存储过程,然后由SQL SERVER本身去完成逻辑处理。总之,不管怎样,你也是得优化你现在的处理逻辑(现有处理逻辑我觉得不合理,效率很低下)。 “真正部署到电力网的服务器上速度会不会提高呢” ------------------------ 服务器当然比你本地要快得多啦,硬件配置根本就不同一个级别,但不管怎样,还是建议你参考上面的建议优化你的处理逻辑才行,否则,你系统的效率将很低。
首先需要知道的是你查询全部记录的目的,然后才能针对目的做修改。 建议根据目的做成一个存储过程或函数,将执行的结果输出处理,不要全部显示,因为输出也是需要消耗大量时间的。 建议将这个表分割一下,根据实际情况,看看能否分割成多张百万记录的表。执行的时候通过多线程进行操作。 因为不知道查询的目的,所以只能泛泛的说说我的想法,具体的优化方案需要具体分析。
每天30W条数据小CASE, 表的主键使用自增长列,这样插入不会引起重排序,对插入速度无影响。
第一列如果是数值类型的话,'2'不需要加单引号,另外,具体的报错信息是什么?
你的意思是执行sql2查询之后,返回null的话就将数据insert进去, if(sql2.equals(null) || sql2.isempty) { ........insert into .......... }
举报成功
经过核实后将会做出处理 感谢您为社区和谐做出贡献
扫码参与新品0元试用 晒单、顶楼豪礼等你拿