2018-06-13  398 views 评论

广告模块或首页推送信息如何才能高效率的查询 SQL语句实现

博主在开发实际过程中遇到这么一个问题,开发的是一个电商系统,那么在首页确定模块的情况下如何更高效的查询数据并绑定呢?

一、首页模块

假定首页模块已经固定,有:热门推荐商品、热门推荐文章、热门问答等

我们需要确定这些模块固定的Code或Id值

现确定对应的值如下:热门推荐商品(1)、热门推荐文章(2)、热门问答(3)

二、正常在ASP.NET MVC中要查询这么一个页面的数据通常有两种情况

1)定义一个ViewModel 包含了这个页面所有的数据类型

2)Ajax多次请求加载不同模块的数据

那么来说说以上两种情况的优点和缺点

使用ViewModel 一次性加载数据,一次请求的服务端的业务操作比较多,用户等待时间可能比较长

使用Ajax多次请求存在一个问题,用户访问一旦多了之后,每次请求都会请求多次服务端接口,同样Web服务和数据库服务端压力都将增加

那么就需要按照实际需求去选择应该选择那种方式了,两者都可以。

 

以下我们就来讲下,如果选择ViewModel一次性绑定数据的查询优化可以参考下面的方案

本次涉及到首页的数据库有两个:

A)Recommend表,用于存储推送到首页的数据  热门推荐商品(1)、热门推荐文章(2)、热门问答(3) 这些数据都存储在这个表,对应的1,2,3就是对应Module这个字段

数据结构如下:

B)Links表,用于存储友情链接

通常的方案就是每次查询一次数据库 保存到内存中,然后查询数据库后一次返回数据,但是这样会有一个弊端,不停的Open和Close数据库,可谓浪费了很多资源,因此今天介绍的就是一次查询出所有的数据,然后到Service 业务层去进行拆分数据,随后再返回。

语句如下(这样做,即使两个表不同数据结构,也是可以一次查出来的,只要梳理出共同的,页面需要的数据结构即可):

(语句写的并不全,意思到了 O(∩_∩)O)

(SELECT IconUrl,Title,LittleTitle,Description,RedirectUrl,Module FROM Recommend where Module = 1 ORDER BY CreateTime DESC LIMIT 0,8)
UNION
(SELECT IconUrl,Title,LittleTitle,Description,RedirectUrl,Module FROM Recommend where Module = 2 ORDER BY CreateTime DESC LIMIT 0,5)
UNION
(SELECT IconUrl,Name AS 'Title','' AS 'LittleTitle','' AS 'Description',LinkUrl AS 'RedirectUrl',-1 AS 'Module'  FROM Links)

 

 

 

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: