簡體   English   中英

MySQL查詢按順序排序需要太多時間

[英]MySQL Query Order By Cluase taking too much time

我有一個查詢,只需要0.001秒,而無需按部分排序。 但是,當我在查詢中添加訂單時,它需要大約.736秒的時間。 那是太多的時間。 我已經將該列編入索引,但是它沒有按預期工作。

這是查詢:

SELECT DISTINCT
n0_.id AS id0, n0_.published_at AS published_at1
FROM
news n0_
    INNER JOIN
news_translations n1_ ON n0_.id = n1_.translatable_id
WHERE
((n0_.unpublished_at IS NOT NULL
    AND (CURRENT_TIMESTAMP >= n0_.published_at
    AND CURRENT_TIMESTAMP < n0_.unpublished_at))
    OR (CURRENT_TIMESTAMP >= n0_.published_at
    AND n0_.unpublished_at IS NULL))

    AND  
        (n0_.status = 1
     AND n0_.content_type_id = 1)
      AND  n1_.locale = 'zh_CN'
     and n0_.id NOT IN (139476 , 226, 225, 224, 223, 218, 213, 69, 65, 62)   
GROUP BY n0_.id
#ORDER BY n0_.published_at DESC
LIMIT 10 OFFSET 0;

這是SHOW KEYS的輸出:

Table   Non_unique  Key_name    Seq_in_index    Column_name Collation   Cardinality Sub_part    Packed  Null    Index_type
news    0   PRIMARY 1   id  A   139656  NULL    NULL        BTREE
news    0   UNIQ_1DD399501204232D   1   comment_box_id  A   139656  NULL    NULL    YES BTREE
news    1   IDX_1DD39950510C33D5    1   approval_type_id    A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD399501A445520    1   content_type_id A   36  NULL    NULL    YES BTREE
news    1   IDX_1DD39950A76ED395    1   user_id A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD3995042A9A1DE    1   smiley_group_id A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD39950B3FE509D    1   survey_id   A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD3995029C1004E    1   video_id    A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD399501CDF82CA    1   cover_image A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD399504E7AF8F     1   gallery_id  A   4   NULL    NULL    YES BTREE
news    1   IDX_1DD399506048130B    1   home_position_id    A   4   NULL    NULL    YES BTREE
news    1   news_published_at_index 1   published_at    A   139656  NULL    NULL        BTREE

排序是一項昂貴的操作,因此對許多行進行排序將需要時間。 一種方法是在訂購前削減結果,但這並不總是可能的。

還要考慮可以在表中找到哪些其他模式並使用它。 我很確定,您的數據始終按ID升序排列(也可能是發布時間)。 如我所見,您是按發布時間排序的,因此,如果數據自然是由表中此列排序的,則可以利用它來發揮自己的優勢。 但是請確保是這種情況,因此沒有例外。 例如,如果在插入新行時始終使用NOW(),則很有可能將它們排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM