关于sql 动态获取数据的效率问题

场景:有10万+用户 ;假设每个用户对表A的获取的字段都不一样;比如:

1)张三需要表A中的字段a、b、c...
2)李四需要表A中的字段a、b、d...
3)王五需要表A中的字段a、c、d...
4)王六需要表A中的字段b、c、f...
...

请问如果用动态sql语句根据需求去获取是否是最佳的方式?效率如何?
select a,b,c from A
....

4个回答

建一张表,存储用户对A的需求字段(u_A)
uid A表字段名(ua)
u001 a,b,c,d
u002 a,c,d,f,g
........
建立存储过程
CREATE PROCEDURE [dbo].[TEST1]
@uid varchar(50)
as
begin
declare @s1 nvarchar(max)
set @s1='select '+(select ua from u_A where uid='''+@uid+''') from A'
exec(@s1 )
end

可以用用户表关联A表,然后动态的去不同的字段,不要用子查询去动态的查询不同的参数。

创建一个用户表,表中含有张三、李四、王五、王六...,将用户表关联A表,在A表中添加外键进行关联,用户表作为从表,通过A表的外键属性就可以提取需要的信息

需要有点不明确、分两种方式来回答:

数据结构应该是两张表:
1:用户自定义列表,三个字段如下:

ID、用户ID、对应的A表列名
1 user1 a
2 user1 b
3 user1 c
4 user2 a
5 user2 b
6 user2 d
7 user3 a
.......
建索引 用户ID
2:A表
a、b、c、d、e、f 。。。
建索引 用户ID
如果应用服务器和数据库服务器之间网络没有瓶颈,选择方式一:
把用户自定义列表放入缓存,直接执行select * from A , 在应用服务器,取得缓存中的对应用户的列,使用反射机制set对应的数据,或者不处理,把数据抛到前端处理。
这种方式的原因是sql语句固定,减少数据的预编译,数据库压力最小。大部分开发数据库IO是性能瓶颈,这种是最佳实现。
如果必须取固定列可以使用方案二
在缓存中取出用户需要的列,然后不同的用户执行不同的sql
user1登录,执行 select 对应的A表列名 from 用户自定义列表 where userid =user1 ,然后 for循环拼接成 "a、b、c";
然后把"a、b、c" 当做参数替换 select #para from A ,替换为 select a、b、c from A;
如果纯数据库开发:
同方案二类似,写成存储过程方式。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于select动态获取数据问题
$.post("/Ajax/getDistrictJson", level: "1", belongid: 0, json: JSON.stringify(areas) , function (data) rn var dataObj = eval("(" + data + ")");rn $.each(dataObj, function (idx, item) rn $(""+item.AName+"").appendTo($("#ProvinceID"))rn )rn $("#Province").val($("#sheng").val())rn alert$(("#Province").length);rn )rn我用JSON动态获的34个省份,为什么那select长度是1啊,而且$("#ProvinceID").change(function () alert($(this).val()))rn获取不了值,弹出undefined,rn这个怎么回事啊
关于SQL效率问题
如何对MS SQL进行优化?rn对于死锁是否需要程序处理
关于SQL效率的问题
在做小型应用时从不考虑SQL执行的效率,一日忽然接到一个项目,一张表中可能有百万条记录,SQL的效率就很重要了,从哪里可以学到这方面的知识呢?
关于SQL "not in" 效率的问题
各位专家,本人最近在研究数据库时发现在SQL2000中NOT IN语句执行效率很低(用exists 也是一样的)。关键是第一次查询的时候慢,第二次就快了。如果几天不查询,再查询时就变的很慢。好像是查询一次后数据被缓冲了,长时间不查询后就放的硬盘中的原因,可是,如何提高第一次查询的速度呢?rn表A (记录数120000条)rnid(主键)rnrn表B (记录数116000条)rnid(主键)rnrn查询语句:rnselect a.id from a where a.id not in (select b.id from b)rn第一次查询时要用5秒左右时间,第二次只要不到1秒时间,过几天又慢了,是不是因为缓冲的原因呀,有没有办法提高呀?rn
关于SQL效率的问题?
现在我有这么一个情况rnrn有表 SUMTAB 一个,里面保存13万条数据汇总rnrn我现在要做的操作就是把sumtab表中的记录分派到4个表中去t1,t2,t3,t4rnrn就是说,假设sumtab表中有4个字段a,b,c,d,我要把a插入到t1,b插入到t2,c插入到t3,d插入到t4中rnrnt1,t2,t3,t4之间的关系是这样的rn假如我把a插入t1,那么t1的出发器将自动生成t2,t3的空列,rn接下来的就是把b和c更新到t2和t3rnd的数据还是要插入到t4中去的,t2,t3,t3中都有字段id与t1中的sid关联,就是说t1与t2t3t3中的每个表都是一对多的关系rnrn问题出现在处理sumtab上了rn我是有游标处理这个事情的,但是很可怜,处理到3万条数据后,速度超慢!无敌慢,rn我想是效率有问题rnrn就是把13万条数据打开,然后从头游到尾。。rnrn哪位大侠有办法解决这个问题,小弟不胜感激。
echarts动态获取数据的问题。。
像这样的json串 动态填充到折线图中 应该怎么写呀。。rn[img=https://img-bbs.csdn.net/upload/201603/28/1459166763_555536.png][/img]rnrnrnjsp:rn[code=java] rn rnrnrn rn rn rn rn rn rn rn rn[/code]rnjs文件:rn[code=java]time_out_option = rn title : rn text : 'xxxx',rn x : 'center',rn ,rn tooltip : rn trigger : 'axis'rn ,rn legend : rn data : [ '接口耗时' ],rn x : 'left'rn ,rn grid : rn bottom : 80rn ,rn dataZoom : [ rn type : 'slider',rn show : true,rn start : 94,rn end : 100,rn handleSize : 8rn , ],rn toolbox : rn feature : rn saveAsImage : rn rn ,rnrn grid : rn top : '15%',rn left : '5%',rn right : '10%',rn bottom : '10%',rn containLabel : truern ,rn xAxis : [ rn type : 'category',rn boundaryGap : false,rn axisLine : rn onZero : falsern ,rn data : []rn ],rn yAxis : [ rn type : 'value'rn ],rn series : [ rn name : '接口耗时',rn type : 'line',rn data :[]rn ]rn;[/code]
动态获取数据
例如,我用JSP页面做了个页面,页面内容包括:单价,数量,总额,rn当我在数量文本框输入数值后,总额随着变化,总额=单价*数量rn请问这样的功能如何实现??????????
关于SQL语句效率的问题
select a.MATERIAL as r,count(*) as c from TZ a,YW b where a.gjz=b.gjz and a.MATERIAL!=' ' group by a.MATERIALrnrnTZ 表 大概有 几十万条数据rnYW 表 大概有 几万条数据rnrn两个表连接查询后大概有几万条数据rnrn现在的问题是 要对多表中的一个字段分组,速度很慢是什么原因?rn或者有没什么更好的写法?rnrn大牛们!~~~~~请指教rn
一个关于sql效率的问题。
我这边有一个sql:rnselect * from tab1 where id in (select id from tab2 where ???) or type = 'aa'rn这个sql 执行的效率相当低。一般都要花1。5-2秒,tab1中的数据也不是很多,也才1w多点。tab2就更少了。rnrn我试着把 or type = 'aa'去掉,速度很快,几十毫秒。rn仅把id in (select id from tab2 where ???) 去掉,速度也快。rn仅把select id from tab2 where ??? 改成把这条语句查出来的值直接写进去,也是很快。rnrn但是放在一起就变的很慢了。rn
关于sql语句效率的问题
比如语句:rn[code=SQL]rn select i.* rn from #wh_Stock_2 as irn wherern (i.lister in (select TargetName from t_user_Permission_Target))rn[/code]rnrn数据少了,倒没有什么关系,如果数据多了,速度就会比较慢的,因为我在sql语句里用到了 in,这样效率会比较慢,但是,我又必须这样做,我才能得到我想要的结果,问题是,有没有其它SQL语句的写法,我这个sql语句写意思是我要在#wh_Stock_2 的数据里当字段lister在表的t_user_Permission_Target.TargetName,有数据就取出来,这段语句很好理解的。我想既不影响速度,又得到我想的结果?rn如何改一下这个sql语句?
sql中关于in的效率问题
SELECT * FROM a where aId In(46,47,99,121,313,321,1,62,48,49)rn这条语句能不能优化rnrn有人说join或EXISTS代替IN会提高效率rnrn我研究了半天也没研究出来
关于sql语句的效率问题
假设table表中有两列,number1 和number2rntable表中有1000W条数据 number1列中随机存入1到1000W的数 number2中存出入1 或2rnnumber1是主键 现在我执行sql语句 select * from table where number1=20 或者执行select * from table where number1=20 and number2=1(已知number1=20的列number2=1) 问第二个sql语句会不会比第一个sql语句快,或者慢
动态和静态编译的效率问题
如题:rn两者在区别在哪rn执行的效率..怎么样.rn请各位发表下意见
从数据库中获取数据的效率问题
如数据库中有100w条数据,我需要将这100w条数据保存在本。rn 常规方法是 select以后然后对记录集进行处理,来进行保存。rn 可是如果数据量大的情况下,效率有点慢,我刚刚测试了下,加载20w条数据到本地,需要2000多毫秒。rn 我想问下,有没有什么办法能提高加载效率?rn 希望得到高手指点 谢谢了
关于删除sql的效率
一个问题,我表里有个字段rn这个字段1w条记录是1rn1w条记录是2rn1w条记录是3rnrndelete from 表 WHERE 字段>2;rn这个会消耗很多资源么 rn那delete from 表 WHERE 字段>3;呢rn rn
关于sql设计的效率
现从小型机的RDB数据库 导出到微机平台,Asp+Sqlserver 数据库采用全部varchar类型,没有建索引等,觉得查询效率非常低,因为没有在sql上的开发经验,请教各位如何提高查询效率,速度?以及在写存储过程中的注意事项?现在本人开发的都是采用select等语句,没有涉及到游标的返回。是否用游标返回更快,更合适,一般游标用在什么场合?
关于sql效率.
rn使用rnrn select * from tb1 结果放到DataSet 中;rn select * from tb1 where ID='1' 结果放到DataSet 中rnrnrn哪个效率高些。谢谢
Echarts3.0的简单使用,动态获取数据
1.导入echarts.js文件 2.博主这里使用的是地图状的图标,所有还需要加上 3.导入JQuery文件,使用ajax来加载动态数据 4.html代码5.js代码$(function(){ $.ajax({ type:"GET", url:"http://localhost:8080/global_rader/query/q
asp.net_echarts后台动态获取数据
自己练手写的几个例子: demo1和demo2是echart两种不同的写法,数据是写死的,仅供参考,推荐以demo2为模板。 demo3、demo4、demo5是ajax动态从后台获取json数据的例子。 demo3是折线图和柱状图。 demo4是饼图。 demo5是双折线(柱状)图。
Ext 的 list动态获取数据
有一个select组件,和一个list组件。打开页面时,list显示所有数据,当select的change事件触发时,list中的数据随着所选条件改变,怎么实现?
ECharts动态获取数据
如图,我在用ECharts做一个表格,从后端向前台穿了一个json格式的列表,在前台接收到后想要将这个列表的数据放在ECharts表格中series中的第一个data中去(这个折线图有两条折线),现在我在console.log( option.series[0].data);中看到我已经将数据写进去了,可是图表中怎么还是没有数据。具体情况如下图,望大佬解答,保证有分。[img=https://img-bbs.csdn.net/upload/201805/12/1526094568_655851.png][/img][img=https://img-bbs.csdn.net/upload/201805/12/1526094579_507861.png][/img][img=https://img-bbs.csdn.net/upload/201805/12/1526094586_875155.png][/img]
表单下拉框动态获取数据
1.在进行表单操作时,下拉框选项需要动态读取数据库数据,使用ajax异步获取数据。 <form class="layui-form layui-form-pane" method="post" id="websiteform"> <div class="layui-form-item"> <label class="layui-for
Echarts动态获取数据(C#)
http://blog.csdn.net/mt122/article/details/38460167
Echarts动态获取数据的使用
import React, { Component } from ‘react’; // 引入 ECharts 主模块 import echarts from ‘echarts/dist/echarts.common’; // 引入折线图 import ‘echarts/lib/chart/line’; // 引入提示框和标题组件 import ‘echarts/lib/component/too...
Layer弹出层动态获取数据
前一阵子做了一个简单的小项目,用到了Layer弹出层(弹出层的用法就不多加赘述了,官网上都有详细的介绍,这里附上网址http://layer.layui.com/),当时前后台合页面的时候就出现了一个问题,弹出层总是获取不到数据,不过后面还是和同学们一起解决了,希望能帮助到大家。
echart+php 动态获取数据(条形图)
echart + php动态获取数据 [要是下面的代码运行不出来 看一下我注释的部分 有提示 出不来可能是数据类型问题 可以加我qq:2721423445 记得备注哦! 共同讨论 ] html部分的代码 <html> <head> <title>bingtu.html</title> <meta charse...
gt-grid怎样动态获取数据
gt-grid怎样动态获取数据 给点思路 谢谢
动态多线程获取数据
C# 动态多线程执行
echart+php 动态获取数据(饼图)
echart 动态获生成图形的核心是需要把请求到的数据重新设定setOption添加进去 如果你的显示不出来图形注意我的注释部分 有提示 html代码 <html> <head> <meta charset="utf-8" /> <title>bingtu.html</title> <s..
echarts关系图动态获取数据
最近在做一个项目的时候由于需要将数据用echarts关系图展示到前端,最开始的想法是一次性将数据全部查出来,然后展示到前端, 但是后面发现,在数据量很大的情况下,一次查询将花费很长的时间,于是后面就想,为什么不按需来查呢,下面就是我通过ajax异步获取数据实现的按需查询,不得不说,效率大大的提高。 前面的初始化什么的就不说了,直奔主题 首先要知道echarts3.0点击事件的添加,很简单 第
highChart后台动态获取数据
本人自己封装的jquery工具类,highChart工具类。用于动态创建highChart图表对象。方便扩展,使用
Swiper 动态获取数据轮播
1.导入Swper最新的js和css2.创建div<div class="swiper-container" style="height: 310px;margin-top: 25px; width:97%;">     <div class="swiper-wrapper wrap" id="carousel">                &a
echarts动态获取数据
        $(function(){               // 基于准备好的dom,初始化echarts实例         var myChart = echarts.init(document.getElementById('leftDiv'),'macarons');  // 指定图表的配置项和数据      myChart.setOption({     title: {  ...
html表格动态获取数据
问下这怎么实现,还有做了个a标签页码如何刷新表格数据
FullCalendar: 动态获取数据
项目中需要用到日历插件,在进行一番比较之后选择了FullCalendar,但是看官方文档的过程中发现文档写得不是很友好(也可能是国人跟老外的思维方式不同,哈哈哈...),所以花了不少时间来完成自己想要的功能。FullCalendar请自行安装,项目中涉及的功能如下: 1. 从后台获取数据并按数据状态显示不同背景颜色 关键点:将ajax请求插入calendar 的初始化代码中,将返回的数据转化为...
动态视图中的获取数据
写代码遇到一个坑:视图B中的数据是域A为空的数据集合,代理的作用是给这个域A分配值。 结果执行一条,视图B就少一条数据,而set doc  = view.getnextdocument(doc) 就遇到问题了。。。。 而平常遍历视图数据时,都是这么样的逻辑。
HighChart扩展-动态获取数据
HighChart扩展实践-动态获取数据封装jQuery工具类这篇文章没有介绍highChart的基础篇,主要实现了封装工具类,动态从后台加载数据。封装highChart工具类对象:var ChartUtil = { /** * 创建图表 * * @param options * @returns */ createChart :
jquery动态获取数据
使用jquery动态的获取数据,获得更好的用户体验
异步刷新动态获取数据
-
下拉框之——动态获取数据
adduser.securityDegree1=null; adduser.securityDegree = new Ext.form.ComboBox( { store : new Ext.data.Store( { proxy : new Ext.data.HttpProxy( { url : '../JSON/groups_GroupsRemote.getSecur...
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表