[英]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
。 但是,這需要觸發update
和inset
。 但是,然后這個查詢:
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.