簡體   English   中英

我應該使用唯一字段還是非唯一字段開始 MySQL 索引?

[英]Should I begin a MySQL index with unique or non-unique field?

我遇到的問題如下:

  • 我有一個包含大約 100000000 行的表
  • 它有 22 個字段 - 一些數字,一些文本
  • 它有一個主鍵id (自動遞增的整數)
  • 它有一個bigint類型的字段another_id和一個唯一的鍵
  • 它有一個名為state的字段,只能取 4 個整數值(0 到 3)
  • 我需要盡快執行以下形式的查詢:
SELECT COUNT(*) 
FROM my_table 
WHERE another_id IN ( <about 100 values> ) 
AND state = ...

對於不同的state值。

索引應該如何? 我在考慮兩個選擇:

  • KEY another_id:state (another_id, state)
  • KEY state:another_id (state, another_id)

這兩種變體之間的性能有什么不同嗎? 還有什么要考慮的嗎?

編輯:引擎是 InnoDB

對於您顯示的查詢,您應該按stateanother_id創建索引。

首先使用在相等條件中引用的任何列定義索引,然后添加在范圍條件或 ORDER BY 或 GROUP BY 中引用的列。

您可能還喜歡我對 MySQL 中多列索引的字段順序是否重要的​​回答或我的演示如何設計索引,真的,或視頻

我同意樓上的回答。 一個澄清雖然是你想要 ita 哈希索引而不是 btree 索引。 它應該工作得更快。 哈希索引不適用於任何涉及不等式的查詢,例如 <=

暫無
暫無

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

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