1. 程式人生 > >Mysql主鍵 UUID做主鍵,自增主鍵及字串主鍵在插入、查詢,分頁等效能

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

a.id = b.id
花了1秒

(我的機器是比較差的那種,好的機器跑起來肯定更快)
其中name添加了索引,沒有索引速度還要慢10倍。

其他方面的問題暫時沒考慮,插入感覺影響特別大。用無序的字元做主鍵,對插入影響很大,用有序的字串做主鍵,對插入,查詢都沒有影響。