可以用Floor與Rand函數(shù)嵌套表達(dá)式為每行記錄生成1-4之間的隨機(jī)數(shù),然后以該隨機(jī)數(shù)對(duì)記錄行排序,這樣就可將該列數(shù)隨機(jī)分成四組了。當(dāng)然表的記錄行數(shù)不能太少,否則無(wú)法保證至少有4個(gè)組。
成都創(chuàng)新互聯(lián)提供高防服務(wù)器、云服務(wù)器、香港服務(wù)器、電信機(jī)房托管等
請(qǐng)參考下列sql實(shí)現(xiàn)語(yǔ)句:
這里假設(shè)表名為t1,字段名為num
select t.* from
(select Floor(4* Rand()+1) as GroupName,
num from t1) t order by t.GroupName;
用count(*)函數(shù)來(lái)統(tǒng)計(jì),返回匹配指定條件的行數(shù)。
例如有個(gè)表名稱為demos,那么統(tǒng)計(jì)行數(shù)可以寫:select count(*) ?from demos;
后面可以加限制條件,例如統(tǒng)計(jì)val大于3的記錄行數(shù):select count(*) ?from demos where val3;
擴(kuò)展資料:
MySQL COUNT(*)
The?COUNT(*)?function returns the number of rows in a result set returned by a?SELECT statement. TheCOUNT(*)?function counts rows that contain no-NULL and NULL values.
COUNT(*) 語(yǔ)法
SELECT COUNT(*) FROM table_name;
參考資料:MySQL官網(wǎng)-MySQL COUNT
mysql數(shù)據(jù)庫(kù)對(duì)1億條數(shù)據(jù)的分表方法設(shè)計(jì):
目前針對(duì)海量數(shù)據(jù)的優(yōu)化有兩種方法:
(1)垂直分割
優(yōu)勢(shì):降低高并發(fā)情況下,對(duì)于表的鎖定。
不足:對(duì)于單表來(lái)說(shuō),隨著數(shù)據(jù)庫(kù)的記錄增多,讀寫壓力將進(jìn)一步增大。
(2)水平分割
如果單表的IO壓力大,可以考慮用水平分割,其原理就是通過(guò)hash算法,將一張表分為N多頁(yè),并通過(guò)一個(gè)新的表(總表),記錄著每個(gè)頁(yè)的的位置。
假如一個(gè)門戶網(wǎng)站,它的數(shù)據(jù)庫(kù)表已經(jīng)達(dá)到了1億條記錄,那么此時(shí)如果通過(guò)select去查詢,必定會(huì)效率低下(不做索引的前提下)。為了降低單表的讀寫IO壓力,通過(guò)水平分割,將這個(gè)表分成10個(gè)頁(yè),同時(shí)生成一個(gè)總表,記錄各個(gè)頁(yè)的信息,那么假如我查詢一條id=100的記錄,它不再需要全表掃描,而是通過(guò)總表找到該記錄在哪個(gè)對(duì)應(yīng)的頁(yè)上,然后再去相應(yīng)的頁(yè)做檢索,這樣就降低了IO壓力。