簡體   English   中英

在MySQL中,如何構建索引來加速這個查詢?

[英]In MySQL, how to build index to speed up this query?

在MySQL中,如何構建索引來加速這個查詢?

SELECT c1, c2 FROM t WHERE c3='foobar';

要真正給出答案,看看你是否已有現有索引會很有用,但......

所有這一切都假設表't'存在並且您需要添加索引,並且您當前只有主鍵上的單個索引或根本沒有索引。

查詢的覆蓋索引將為您的需求提供最佳性能,但是使用任何索引都會犧牲一些插入速度。 犧牲多少取決於您的應用程序的配置文件。 如果你從表中大部分時間閱讀它並不重要。 如果您只有幾個索引,即使適度的寫入負載也無關緊要。 您桌子的有限存儲空間也可能發揮作用......您需要對權衡做出最終評估,如果它是明顯的。 好消息是它不斷受到打擊。 通常,添加索引不會以指數方式減慢插入,只是線性地減慢。

無論如何,以下是您選擇最佳性能的選擇:

  1. 如果c3是表t的主鍵,則無法在查詢中做任何更好的事情,以使索引更快。
  2. 假設c1是你的主鍵t:

     ALTER TABLE t ADD INDEX covering_index (c3,c2); 
  3. 如果c1不是你的pk(也不是c2),請使用:

     ALTER TABLE t ADD INDEX covering_index (c3,c2,c1); 
  4. 如果c2是你的PK,請使用:

     ALTER TABLE t ADD INDEX covering_index (c3,c1); 
  5. 如果磁盤上的空間或插入速度是一個問題,您可以選擇執行點索引。 你會犧牲一些性能,但如果你插入很重,它可能是正確的選擇:

     ALTER TABLE t ADD INDEX a_point_index (c3); 

在您搜索的列上構建索引,因此在這種情況下,您必須在字段c3上添加索引:

CREATE INDEX c3_index ON t(c3)

暫無
暫無

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

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