簡體   English   中英

如何用“ if排序”為查詢建立索引的表?

[英]How to index a table for a query with “order by if”?

是否可以創建索引以方便以下查詢中存在IF條件的查詢,如下所示:

SELECT a, b, c, d, e 
FROM myTable 
ORDER BY IF(published, 0, 1), rank, title

我嘗試在myTable(已發布,等級,標題)上創建索引,並在myTable(等級,標題)上創建索引,但是使用EXPLAIN測試查詢顯示未使用索引。

“ published”是tinyint,為0或1; “等級”也是tinyint,但是可以是該范圍內的任何值; “標題”是varchar(255)。

非常感謝(我正在使用從其他開發人員繼承的代碼...)

在此特定示例中,看起來查詢可以被重寫為:

SELECT a, b, c, d, e 
FROM myTable 
ORDER BY published DESC, rank, title

特別是,這不適用於任意轉換函數,但在此示例中適用。

在MySQL中沒有索引可以幫助此查詢。

您可以做的一件事是向表中添加一個PublishedFlag 但是,這需要觸發updateinset 但是,然后這個查詢:

SELECT a, b, c, d, e 
FROM myTable 
ORDER BY PublsihedFlag, rank, title

可以利用mytable(PublsihedFlag, rank, title)上的索引。

暫無
暫無

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

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