加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL 8.0新特性之统计直方图

发布时间:2018-09-25 16:48:34 所属栏目:MySql教程 来源:韩杰·沃趣科技
导读:副标题#e# 【新品产上线啦】51CTO播客,随时随地,碎片化学习 概览 MySQL8.0实现了统计直方图。利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段。这可以帮助查询优化器找到更优的执行计划。统计直方图的主要使用场景是用来

通过这个直方图,查询花费了0.5秒左右。原因呢?主要的原因是,查询语句中的谓词“web_page.wp_char_count BETWEEN 5000 AND 5200”。没有直方图的时候,优化器会假设web_page表中符合谓词“web_page.wp_char_count BETWEEN 5000 AND 5200”的数据占到总数据11.11%左右。但,这是错误的。用下面的查询语句,可以看到实际上满足条件的数据只有1.6%。

  1. mysql> SELECT  
  2. -> (SELECT COUNT(*) FROM web_page WHERE web_page.wp_char_count BETWEEN 5000 AND 5200)  
  3. -> /  
  4. -> (SELECT COUNT(*) FROM web_page) AS ratio;  
  5. +--------+  
  6. | ratio |  
  7. +--------+  
  8. | 0.0167 |  
  9. +--------+  
  10. 1 row in set (0.00 sec) 

通过直方图,优化器会知道这个信息,并且更早进行表join,因此执行时间快了三倍。

Query 61

查询如下:在给定的年份和月份,有和没有广告宣传的情况下货物的售卖比率。

  1. mysql> SELECT promotions,                                                                                                                                                                                        ->        total, 
  2.  
  3. ->        CAST(promotions AS DECIMAL(15, 4)) / CAST(total AS DECIMAL(15, 4)) * 100  
  4. -> FROM   (SELECT SUM(ss_ext_sales_price) promotions  
  5. ->         FROM   store_sales,  
  6. ->                store,  
  7. ->                promotion,  
  8. ->                date_dim,  
  9. ->                customer,  
  10. ->                customer_address,  
  11. ->                item  
  12. ->         WHERE  ss_sold_date_sk = d_date_sk  
  13. ->                AND ss_store_sk = s_store_sk  
  14. ->                AND ss_promo_sk = p_promo_sk  
  15. ->                AND ss_customer_sk = c_customer_sk  
  16. ->                AND ca_address_sk = c_current_addr_sk  
  17. ->                AND ss_item_sk = i_item_sk  
  18. ->                AND ca_gmt_offset = -5  
  19. ->                AND i_category = 'Home'  
  20. ->                AND ( p_channel_dmail = 'Y'  
  21. ->                       OR p_channel_email = 'Y'  
  22. ->                       OR p_channel_tv = 'Y' ) 
  23. ->                AND s_gmt_offset = -5  
  24. ->                AND d_year = 2000  
  25. ->                AND d_moy = 12) promotional_sales,  
  26. ->        (SELECT SUM(ss_ext_sales_price) total  
  27. ->         FROM   store_sales,  
  28. ->                store,  
  29. ->                date_dim,  
  30. ->                customer,  
  31. ->                customer_address,  
  32. ->                item  
  33. ->         WHERE  ss_sold_date_sk = d_date_sk  
  34. ->                AND ss_store_sk = s_store_sk  
  35. ->                AND ss_customer_sk = c_customer_sk  
  36. ->                AND ca_address_sk = c_current_addr_sk  
  37. ->                AND ss_item_sk = i_item_sk  
  38. ->                AND ca_gmt_offset = -5  
  39. ->                AND i_category = 'Home'  
  40. ->                AND s_gmt_offset = -5  
  41. ->                AND d_year = 2000  
  42. ->                AND d_moy = 12) all_sales  
  43. -> ORDER  BY promotions,  
  44. ->           total  
  45. -> LIMIT  100;  
  46. +------------+------------+--------------------------------------------------------------------------+  
  47. | promotions | total      | CAST(promotions AS DECIMAL(15, 4)) / CAST(total AS DECIMAL(15, 4)) * 100 |  
  48. +------------+------------+--------------------------------------------------------------------------+  
  49. | 3213210.07 | 5966836.78 |                                                              53.85114741 |  
  50. +------------+------------+--------------------------------------------------------------------------+  
  51. 1 row in set (2.78 sec) 

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读