mysql 优化rand_mysql优化--巧用rand(),with rollup,help__update2014.1.13
巧用rand()提取隨機行:
mysql中rand()獲取0-1之間的一個隨機數.這個函數和order by能把數據隨機排序。
隨機從表中取出十條數據:
select * from tablename order by rand() limit 10;
此方法確實很方便,但是效率上卻慢的驚人,切勿使用。
SELECT * FROM `table`WHERE id>= ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) * RAND() + (SELECT MIN(id) FROM `table`) LIMIT 10
這條語句看上去有點復雜,但實際的運行效率想到的高,而且能保證10條記錄都是隨機。測試了下,用時0.048s,相當給力。
利用GROUP BY的WITH ROLLUP
使用group by的with rollup子句可以檢索出更多的分組聚合信息。
mysql> select * from demo;+-------+-------+| cname | pname|+-------+-------+| bj ? ?| hd ? || bj ? ?| hd ? || bj ? ?| xc ? || bj ? ?| xc ? || bj ? ?| hd ? || sh ? ?| dh ? || sh ? ?| dh ? || sh ? ?| rg ? || sh ? ?| dh ? |+-------+-------+9 rows in set (0.00 sec)
對demo表按照cname、pname列分組對pname列進行聚合計算如下
mysql> select cname,pname,count(pname) from demo groupby cname,pname;
+-------+-------+--------------+
| cname | pname | count(pname) |
+-------+-------+--------------+
| bj ? | hd ? ?| ? ? ? ? ? ?3 |
| bj ? | xc ? ?| ? ? ? ? ? ?2 |
| sh ? | dh ? ?| ? ? ? ? ? ?3 |
| sh ? | rg ? ?| ? ? ? ? ? ?1 |
+-------+-------+--------------+
4 rows in set (0.00 sec)
同樣使用with rollup關鍵字后,統計出更多的信息,如下。
注意: with rollup不可以和ordery by同時使用
mysql> select cname,pname,count(pname) from demo groupby cname,pname with rollup;
+-------+-------+--------------+
| cname | pname | count(pname) |
+-------+-------+--------------+
| bj ? | hd ? ?| ? ? ? ? ? ?3 |
| bj ? | xc ? ?| ? ? ? ? ? ?2 |
| bj ? | NULL ?| ? ? ? ? ? ?5 |
| sh ? | dh ? ?| ? ? ? ? ? ?3 |
| sh ? | rg ? ?| ? ? ? ? ? ?1 |
| sh ? | NULL ?| ? ? ? ? ? ?4 |
| NULL ?| NULL ?| ? ? ? ? ? 9 |
+-------+-------+--------------+
7 rows in set (0.00 sec)
mysql help使用:? ?% \G
1.mysql使用時如果記不住命令可用?獲得幫助。通常是 ? create ?/ ? ? alter ?這樣使用
2.當太長的命令記不住可以 ? reg%獲得了regexp的使用方法。? opti%獲得了optimize的使用方法。
3.\G 會格式化輸出sql結果。使用\G不用加;。
總結
以上是生活随笔為你收集整理的mysql 优化rand_mysql优化--巧用rand(),with rollup,help__update2014.1.13的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的LAMP源码编译安装linux+Ap
- 下一篇: 划线价格怎么弄java_京东可以设置划线