我有一個MySQL的InnoDB表 -性能主鍵
create table data (
`sha256` CHAR(64) NOT NULL,
'created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
<some other fields>
PRIMARY KEY (`sha256`),
)
一個在mysqld_slow_query最慢的查詢是
select * from data where created between "2013-02-01" and "2013-03-01";
爲了提高執行力這個查詢的,我有兩個選項:
選項1:添加一個索引創建
選項2:創建('創建','sha256')主鍵,並在sha256上添加索引。
思維這裏要說的是,當我們選擇了大量的行,如在一個月內收集到的數據,我想,以減少被訪問的B樹塊的數量。如果我們通過索引訪問這些記錄(選項1),我們仍然最終可能會爲每條記錄訪問不同的塊。相反,如果我們將按時間戳排序的記錄存儲爲主鍵/聚簇鍵(選項2),我們將在同一個B樹塊中找到大量記錄,這會減少磁盤讀取。
但由於某些原因,而選擇1提高了性能,選擇2並不能改善它一樣多。 任何想法爲什麼?還有其他建議嗎?提前致謝。因爲它使用集羣主索引和一個CHAR(64)
使一個非常大的主鍵
這是一個MyISAM或InnoDB表? – 2013-04-09 21:17:07
從什麼時候mysql允許你在'CREATE TABLE'命令中使用''''? – Barmar 2013-04-09 21:17:51
@G_Nugget InnoDB。 Barmar固定括號 – 2013-04-09 21:25:42