在Datatables中,我使用两个查询1来获取具有服务器端分页的特定日期范围内的记录,另一个用于获取该特定日期范围内的记录总数。我正在使用 Postgresql数据库。
select * from daily_txns where created_date <='2017-08-01' and created_date>='2017-07-01' and mid='0446721M0008690' order by created_date desc limit 10;
select count(mid) from daily_txns where created_date <='2017-08-01' and created_date>='2017-07-01' and mid='0446721M0008690';
这是正确的做法,还是有任何最佳方法。 如果第一个查询需要20秒,那么第二个查询需要40秒,显示结果所花费的总时间超过60秒。如何克服这个问题。
答案 0 :(得分:0)
如果您使用的是postgres,则可以使用此功能将所有内容缩减为一个查询
def search_by_keyword(self,the_Term):
DEVELOPER_KEY = "MY API KEY"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
youtube = build(YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey= DEVELOPER_KEY)
search_response = youtube.search().list(q=the_Term,
part="id,snippet",
maxResults=1).execute()
videos = []
for search_result in search_response.get("items", []):
if search_result["id"]["kind"] == "youtube#video":
videos.append((search_result["id"]["videoId"]))
return 'https://www.youtube.com/watch?v=' + videos[0]
&#34; count(*)OVER()AS full_count&#34;将会忽略&#39;通过的限制为您提供了可能元素的全部计数
答案 1 :(得分:0)
解决方案取决于您的表索引和此答案,只有当索引正确并且您的解决方案(如count(*)对您没有帮助时)。
但有时您可以尝试使用标记SQL_CALC_FOUND_ROWS进行查询,但我建议您在使用之前阅读this问题和答案。
解决方案:
select SQL_CALC_FOUND_ROWS * from daily_txns where created_date <='2017-08-01' and created_date>='2017-07-01' and mid='0446721M0008690' order by created_date desc limit 10;
查询获取查询的总记录
SELECT FOUND_ROWS() as cnt
答案 2 :(得分:0)
您需要在表daily_txns上为columns和created_date添加索引。我也猜测mid将比created_date更具限制性,因此我建议首先在查询中使用它,以便搜索速度更快。
select * from daily_txns where mid='0446721M0008690' created_date <='2017-08-01' and created_date>='2017-07-01' order by created_date desc limit 10;
select count(mid) from daily_txns where mid='0446721M0008690' and created_date <='2017-08-01' and created_date>='2017-07-01';