MySQL中GROUP BY的基本實現原理_MySQL教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:PHP實現將EXCEL文件導入到MYSQL
      最近因項目需求,要實現將excel文件通過php頁面導入mysql數據庫中。在網上搜了很多這方面的資料,發現都是將excel文件另存為csv文件,然后從csv文件導入。這里介紹一個直接將excel文件導入mysql的例子。我花了一晚上的時間測試,無論導入簡繁體都不會出現亂碼,非常好

         由于 GROUP BY 實際上也同樣會進行排序操作,而且與 ORDER BY 相比,GROUP BY 主要只是多了排序之后的分組操作。當然,如果在分組的時候還使用了其他的一些聚合函數,那么還需要一些聚合函數的計算。所以,在GROUP BY 的實現過程中,與 ORDER BY 一樣也可以利用到索引。

        在 MySQL 中,GROUP BY 的實現同樣有多種(三種)方式,其中有兩種方式會利用現有的索引信息來完成 GROUP BY,另外一種為完全無法使用索引的場景下使用。下面我們分別針對這三種實現方式做一個分析。

        1.使用松散(Loose)索引掃描實現 GROUP BY

        何謂松散索引掃描實現 GROUP BY 呢?實際上就是當 MySQL 完全利用索引掃描來實現 GROUP BY 的時候,并不需要掃描所有滿足條件的索引鍵即可完成操作得出結果。

        下面我們通過一個示例來描述松散索引掃描實現 GROUP BY,在示例之前我們需要首先調整一下 group_message 表的索引,將 gmt_create 字段添加到 group_id 和 user_id 字段的索引中:

        以下為引用的內容:

        sky@localhost : example 08:49:45> create index idx_gid_uid_gc

        -> on group_message(group_id,user_id,gmt_create);

        Query OK, rows affected (0.03 sec)

        Records: 96 Duplicates: 0 Warnings: 0

        sky@localhost : example 09:07:30> drop index idx_group_message_gid_uid

        -> on group_message;

        Query OK, 96 rows affected (0.02 sec)

        Records: 96 Duplicates: 0 Warnings: 0

        然后再看如下 Query 的執行計劃:

        以下為引用的內容:

        sky@localhost : example 09:26:15> EXPLAIN

        -> SELECT user_id,max(gmt_create)

        -> FROM group_message

        -> WHERE group_id < 10

        -> GROUP BY group_id,user_idG

        *************************** 1. row ***************************

        id: 1

        select_type: SIMPLE

        table: group_message

        type: range

        possible_keys: idx_gid_uid_gc

        key: idx_gid_uid_gc

        key_len: 8

        ref: NULL

        rows: 4

        Extra: Using where; Using index for group-by

        1 row in set (0.00 sec)

        我們看到在執行計劃的 Extra 信息中有信息顯示“Using index for group-by”,實際上這就是告訴我們,MySQL Query Optimizer 通過使用松散索引掃描來實現了我們所需要的 GROUP BY 操作。

      分享:mysql導入數據庫文件最大限制的修改
      自己電腦上裝的WAMP,在導入數據庫比較大(大于2M)時遇到錯誤,不能導入。 找到解決方法: php.ini配置文件中有三處地方需要改動: upload_max_filesize memory_limit post_max_size 這三個值都工具實際情況改下,重啟服務器以后,雖然導入時仍然顯示是 最大限制:2,04

      來源:模板無憂//所屬分類:MySQL教程/更新時間:2014-10-10
      相關MySQL教程