[英]MySQL select unique row entries of a column as columns in a new view or table
[英]How can one generate unique values for each row in a new column in a mysql table?
從概念上講,這似乎很簡單,但是一旦用SQL術語將其變得困難。
假設一個表中有3行,稱為“ stuff”。
col1 col2 col3
------ ------ ------
aaaa bbbb cccc
xxxx yyyy zzzz
aaaa bbbb cccc
假設我想添加一個pk列並為其賦予唯一值。 我沒有可提供的SQL更新來更新第一行而不是第三行。 但是事實證明,MySQL允許的SQL擴展給出了答案。
alter table stuff add column pk int;
update table set pk = 1 where pk is NULL limit 1;
update table set pk = 2 where pk is NULL limit 1;
update table set pk = 3 where pk is NULL limit 1;
這給了我:
pk col1 col2 col3
------ ------ ------ ------
1 aaaa bbbb cccc
2 xxxx yyyy zzzz
3 aaaa bbbb cccc
但是事實證明,如果使用超過500萬行的表執行此操作,則將花費非常長的時間。 我有一個猜測,當我真正想要的只是一個時,它正在做大量工作來查找pk = NULL的所有行。
有誰知道為什么它運行緩慢? 是否有更快或更兼容SQL的方法來做到這一點? 我無法想象會怎樣。
您的查詢速度很慢,因為您的IS NULL
條件每次都會產生FULL SCAN
這顯然是因為,您仍然不能在該列上使用索引(您還沒有)
您可以使用MySQL 變量生成唯一值。 那將是:
UPDATE stuff CROSS JOIN (SELECT @pk:=0) AS init SET stuff.pk=@pk:=@pk+1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.