2013-04-05 60 views

回答

0

由表使用索引免去您的索引名 SELECT FLD(xxx) WHERE ID> 50000 和fld_1 = 0 LIMIT 1000

+0

它不工作。我也嘗試過力量指數。但只有一個索引將被使用,而不是兩個 – georgecj11 2013-04-05 06:50:49

+0

你有沒有嘗試使用索引(xxx1,xxx2)? – shola 2013-04-05 07:00:50

+0

是的,我做到了。如果我說強制索引(index_1),它永遠不會使用index_2。我知道。 – georgecj11 2013-04-05 07:05:58

3

我不下方嘗試」不知道有什麼辦法強制索引合併。該手冊頁上的條件描述了何時可以完成索引合併的條件,如果可以的話(如果基於成本的優化器決定值得這樣做),優化器應該自動執行。如果不可能,你不能強制索引合併。

但是,複合索引通常表現比索引合併好,所以這將是一個更好的策略。

列的順序很重要。把列的等於的列先比較索引,然後列不等式比較。

CREATE INDEX idxFld1Id ON `table` (fld_1, id); 

另請參閱我的演示文稿How to Design Indexes, Really


可以進行架構更改,如創建索引 - 無需停機 - 通過使用http://www.percona.com/doc/percona-toolkit/pt-online-schema-change.html

當然首先嚐試在你的數據庫的測試複印,學習如何使用工具。

+0

感謝您的回覆。到目前爲止,添加索引對我來說幾乎是不可能的,因爲它需要幾個小時的停機時間。所以我試圖利用現有的索引。如果我在(fld1,id)上創建索引,那麼選擇索引的概率就會更大,因爲基數太高,我有點擔心它是否會被使用,即使在假設要使用其他索引時也是如此。 – georgecj11 2013-04-17 03:52:22

+0

@BillKarwin,「在線模式更改」的缺點是什麼? – Pacerier 2015-02-01 19:42:51

+0

@Pacerier,pt-online-schema-change比使用傳統的ALTER TABLE要慢。它要求表具有主鍵並且沒有觸發器。否則,它沒有太大的缺點。我建議你看作者的網絡研討會,參見[Zero-Downtime Schema Changes in MySQL](http://www.percona.com/webinars/2012-05-02-zero-downtime-schema-changes-in-mysql) ) – 2015-02-03 04:58:41

相關問題