Mysql主鍵 UUID做主鍵,自增主鍵及字串主鍵在插入、查詢,分頁等效能
1.插入方面
UUID做主鍵,其他欄位相同,插入100萬條資料,用了3.5個小時
自增主鍵,其他欄位相同,插入相同的100萬條資料,用了16分鐘
有序增長的字串做主鍵,其他欄位相同,插入相同100萬條資料,用了7分鐘
2.查詢方面
UUID做主鍵,select count() from info 查詢數量花了2.86秒
自增主鍵,select count() from apple 查詢數量花了1.5秒
有序增長的字串做主鍵,SELECT COUNT(*) FROM banana 花了0.8秒
3.分頁查詢
UUID做主鍵,SELECT * FROM info a
INNER JOIN (
SELECT id FROM info LIMIT 1000000,10
) b
ON a.id = b.id
查詢花了2.7秒
自增主鍵, SELECT * FROM apple a
INNER JOIN (
SELECT id FROM apple LIMIT 1000000,10
) b
ON a.id = b.id
查詢花了1秒
有序增長的字串做主鍵: SELECT * FROM banana a
INNER JOIN (
SELECT id FROM banana LIMIT 1000000,10
) b
ON a.id = b.id
花了1秒
排序在分頁
UUID: SELECT * FROM info a
INNER JOIN (
SELECT id FROM info ORDER BY NAME LIMIT 1000000,10
) b
ON a.id = b.id
查詢花費:2.75秒
自增主鍵: SELECT * FROM apple a
INNER JOIN (
SELECT id FROM apple ORDER BY NAME LIMIT 1000000,10
) b
ON a.id = b.id
查詢花費:1.2秒
有序增長的字串做主鍵:SELECT * FROM banana a
INNER JOIN (
SELECT id FROM banana ORDER BY NAME LIMIT 900000,10
) b
ON
花了1秒
(我的機器是比較差的那種,好的機器跑起來肯定更快)
其中name添加了索引,沒有索引速度還要慢10倍。
其他方面的問題暫時沒考慮,插入感覺影響特別大。用無序的字元做主鍵,對插入影響很大,用有序的字串做主鍵,對插入,查詢都沒有影響。