数据表加速了内容显示

时间:2017-08-01 14:20:29

标签: php database laravel datatables

在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秒。如何克服这个问题。

3 个答案:

答案 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';