Mysql——SQL最佳化-統計某種類型的個數,mysqlsql最佳化個數

來源:互聯網
上載者:User

Mysql——SQL最佳化-統計某種類型的個數,mysqlsql最佳化個數

有時我們想統計某種類型有多少個,會用這個SQL。全表掃描之餘,還要filesort,耗時1.34秒。
 
mysql>  select country,count(*) from t1 group by country;+---------+----------+| country | count(*) |+---------+----------+| NULL    |       32 || africa  |   524288 || america |   524288 || china   |   524288 |+---------+----------+4 rows in set (1.34 sec)mysql> desc select country,count(*) from t1 group by country;+----+-------------+-------+------+---------------+------+---------+------+---------+---------------------------------+| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows    | Extra                           |+----+-------------+-------+------+---------------+------+---------+------+---------+---------------------------------+|  1 | SIMPLE      | t1    | ALL  | NULL          | NULL | NULL    | NULL | 1573382 | Using temporary; Using filesort |+----+-------------+-------+------+---------------+------+---------+------+---------+---------------------------------+1 row in set (0.00 sec)
以下是兩種最佳化方法,都是全表掃描,但估計count()要比sum()耗的CPU少點,方法更佳。
mysql> select count(country='africa' or null) as africa,count(country='america' or null) as america, count(country='china' or null) as china from t1;+--------+---------+--------+| africa | america | china  |+--------+---------+--------+| 524288 |  524288 | 524288 |+--------+---------+--------+1 row in set (0.78 sec)mysql> desc select count(country='africa' or null) as africa,count(country='america' or null) as america, count(country='china' or null) as china from t1;+----+-------------+-------+------+---------------+------+---------+------+---------+-------+| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows    | Extra |+----+-------------+-------+------+---------------+------+---------+------+---------+-------+|  1 | SIMPLE      | t1    | ALL  | NULL          | NULL | NULL    | NULL | 1573382 |       |+----+-------------+-------+------+---------------+------+---------+------+---------+-------+1 row in set (0.00 sec)mysql> select sum(country='africa') as africa ,sum(country='america') as america,sum(country='china') from t1;+--------+---------+----------------------+| africa | america | sum(country='china') |+--------+---------+----------------------+| 524288 |  524288 |               524288 |+--------+---------+----------------------+1 row in set (0.86 sec)mysql> desc select sum(country='africa') as africa ,sum(country='america') as america,sum(country='china') from t1;+----+-------------+-------+------+---------------+------+---------+------+---------+-------+| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows    | Extra |+----+-------------+-------+------+---------------+------+---------+------+---------+-------+|  1 | SIMPLE      | t1    | ALL  | NULL          | NULL | NULL    | NULL | 1573382 |       |+----+-------------+-------+------+---------------+------+---------+------+---------+-------+1 row in set (0.00 sec)
版本mysql5.5.30



mysql資料庫,sql語句,把一個表中的統計數量,更新到兩一個表中

update b set b.cnum = (select c.counts from
(SELECT cid,COUNT(*) counts FROM comment GROUP BY cid) c
where a.cid=c.cid);

哎,禁不住說一聲,苦逼程式員啊,都這麼晚不睡

你試試吧,按照你描述的,我這麼寫應該就通過了,有問題直接hi
 
mysql SQL語句最佳化

select 指定的列看看, 還有盡量用索引來搜尋吧
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.