4
CREATE TABLE participations (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
participant_id int(10) unsigned NOT NULL,
prize_id int(10) unsigned NOT NULL,
win tinyint(1) NOT NULL DEFAULT '0',
-- ...
PRIMARY KEY (id),
INDEX participant_id (participant_id),
INDEX prize_id (prize_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我有這些查詢:MySQL:如何在布爾/ tinyint列上創建部分索引?
SELECT prize_id, participant_id FROM participations WHERE win=1;
SELECT participant_id FROM participations WHERE prize_id=1 AND win=1;
可以創建像(PostgreSQL-style)部分索引?
CREATE UNIQUE INDEX prize_win ON participations (prize_id) WHERE win=1;
__
計劃B:有一個表 「贏家」(prize_id,participant_id)。
關於索引的更大尺寸使用情況,在2011年發佈此答案時可能會出現這種情況,但現在情況不再如此。 根據[官方文檔](https://dev.mysql.com/doc/refman/5.7/en/create-index.html): '如果列中的名稱通常與前10個字符不同該索引不應該比從整個名稱列創建的索引慢得多。另外,對索引使用列前綴可以使索引文件更小,這可以節省大量磁盤空間,並且還可以加速INSERT操作。' –
@AbuJunayd我想你會誤解。比較是在[不包括每行的索引](https://en.wikipedia.org/wiki/Partial_index)(提問者描述的和MySQL目前不支持的)和覆蓋附加列的複合索引之間進行比較。如果提問者試圖通過索引行的子集來減少一列的索引大小,那麼肯定向索引添加第二列(並且仍然索引所有行)將增加其大小。 – Wiseguy