青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

MySQL分表優化試驗

我們的項目中有好多不等于的情況。今天寫這篇文章簡單的分析一下怎么個優化法。
這里的分表邏輯是根據t_group表的user_name組的個數來分的。
因為這種情況單獨user_name字段上的索引就屬于爛索引。起不了啥名明顯的效果。


1
、試驗PROCEDURE.
DELIMITER $$
DROP PROCEDURE `t_girl`.`sp_split_table`$$
CREATE PROCEDURE `t_girl`.`sp_split_table`()
BEGIN
declare done int default 0;
declare v_user_name varchar(20) default '';
declare v_table_name varchar(64) default '';
-- Get all users' name.
declare cur1 cursor for select user_name from t_group group by user_name;
-- Deal with error or warnings.
declare continue handler for 1329 set done = 1;
-- Open cursor.
open cur1;
while done <> 1
do
    fetch cur1 into v_user_name;
    if not done then
      -- Get table name.
      set v_table_name = concat('t_group_',v_user_name);
      -- Create new extra table.
      set @stmt = concat('create table ',v_table_name,' like t_group');
      prepare s1 from @stmt;
      execute s1;
      drop prepare s1;
      -- Load data into it.
      set @stmt = concat('insert into ',v_table_name,' select * from t_group where user_name = ''',v_user_name,'''');
      prepare s1 from @stmt;
      execute s1;
      drop prepare s1;
    end if;
end while;
-- Close cursor.
close cur1;
-- Free variable from memory.
set @stmt = NULL;
END$$

DELIMITER ;
2
、試驗表。
我們用一個有一千萬條記錄的表來做測試。

mysql> select count(*) from t_group;
+----------+
| count(*) |
+----------+
| 10388608 |
+----------+
1 row in set (0.00 sec)

表結構。
mysql> desc t_group;
+-------------+------------------+------+-----+-------------------+----------------+
| Field       | Type             | Null | Key | Default           | Extra          |
+-------------+------------------+------+-----+-------------------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL              | auto_increment |
| money       | decimal(10,2)    | NO   |     |                   |                |
| user_name   | varchar(20)      | NO   | MUL |                   |                |
| create_time | timestamp        | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+------------------+------+-----+-------------------+----------------+
4 rows in set (0.00 sec)

索引情況。

mysql> show index from t_group;
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table   | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| t_group |          0 | PRIMARY          |            1 | id          | A         |    10388608 |     NULL | NULL   |      | BTREE      |         |
| t_group |          1 | idx_user_name    |            1 | user_name   | A         |           8 |     NULL | NULL   |      | BTREE      |         |
| t_group |          1 | idx_combination1 |            1 | user_name   | A         |           8 |     NULL | NULL   |      | BTREE      |         |
| t_group |          1 | idx_combination1 |            2 | money       | A         |        3776 |     NULL | NULL   |      | BTREE      |         |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
4 rows in set (0.00 sec)

PS:
idx_combination1
這個索引是必須的,因為要對user_nameGROUP BY。此時屬于松散索引掃描!當然完了后你可以干掉她。
idx_user_name
這個索引是為了加快單獨執行constant這種類型的查詢。
我們要根據用戶名來分表。

mysql> select user_name from t_group where 1 group by user_name;
+-----------+
| user_name |
+-----------+
| david     |
| leo       |
| livia     |
| lucy      |
| sarah     |
| simon     |
| sony      |
| sunny     |
+-----------+
8 rows in set (0.00 sec)

所以結果表應該是這樣的。
mysql> show tables like 't_group_%';
+------------------------------+
| Tables_in_t_girl (t_group_%) |
+------------------------------+
| t_group_david                |
| t_group_leo                  |
| t_group_livia                |
| t_group_lucy                 |
| t_group_sarah                |
| t_group_simon                |
| t_group_sony                 |
| t_group_sunny                |
+------------------------------+
8 rows in set (0.00 sec)

3
、對比結果。


mysql> select count(*) from t_group where user_name = 'david';
+----------+
| count(*) |
+----------+
| 1298576 |
+----------+
1 row in set (1.71 sec)

執行了將近2秒。

mysql> select count(*) from t_group_david;
+----------+
| count(*) |
+----------+
| 1298576 |
+----------+
1 row in set (0.00 sec)
幾乎是瞬間的。

mysql> select count(*) from t_group where user_name <> 'david';
+----------+
| count(*) |
+----------+
| 9090032 |
+----------+
1 row in set (9.26 sec)
執行了將近10秒,可以想象,這個是實際的項目中是不能忍受的。
mysql> select (select count(*) from t_group) - (select count(*) from t_group_david) as total;
+---------+
| total   |
+---------+
| 9090032 |
+---------+
1 row in set (0.00 sec)
幾乎是瞬間的。


我們來看看聚集函數。
對于原表的操作。


mysql> select min(money),max(money) from t_group where user_name = 'david';
+------------+------------+
| min(money) | max(money) |
+------------+------------+
|      -6.41 |     500.59 |
+------------+------------+
1 row in set (0.00 sec)
最小,最大值都是FULL INDEX SCAN。所以是瞬間的。
mysql> select sum(money),avg(money) from t_group where user_name = 'david';
+--------------+------------+
| sum(money)   | avg(money) |
+--------------+------------+
| 319992383.84 | 246.417910 |
+--------------+------------+
1 row in set (2.15 sec)
其他聚集函數的結果就不是FULL INDEX SCAN了。耗時2.15秒。

對于小表的操作。
mysql> select min(money),max(money) from t_group_david;
+------------+------------+
| min(money) | max(money) |
+------------+------------+
|      -6.41 |     500.59 |
+------------+------------+
1 row in set (1.50 sec)
最大最小值完全是FULL TABLE SCAN,耗時1.50秒,不劃算。以此看來。
mysql> select sum(money),avg(money) from t_group_david;
+--------------+------------+
| sum(money)   | avg(money) |
+--------------+------------+
| 319992383.84 | 246.417910 |
+--------------+------------+
1 row in set (1.68 sec)

取得這兩個結果也是花了快2秒,快了一點。

我們來看看這個小表的結構。
mysql> desc t_group_david;
+-------------+------------------+------+-----+-------------------+----------------+
| Field       | Type             | Null | Key | Default           | Extra          |
+-------------+------------------+------+-----+-------------------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL              | auto_increment |
| money       | decimal(10,2)    | NO   |     |                   |                |
| user_name   | varchar(20)      | NO   | MUL |                   |                |
| create_time | timestamp        | NO   |     | CURRENT_TIMESTAMP |                |
+-------------+------------------+------+-----+-------------------+----------------+
4 rows in set (0.00 sec)

明顯的user_name屬性是多余的。那么就干掉它。
mysql> alter table t_group_david drop user_name;
Query OK, 1298576 rows affected (7.58 sec)
Records: 1298576 Duplicates: 0 Warnings: 0

現在來重新對小表運行查詢

mysql> select min(money),max(money) from t_group_david;
+------------+------------+
| min(money) | max(money) |
+------------+------------+
|      -6.41 |     500.59 |
+------------+------------+
1 row in set (0.00 sec)

此時是瞬間的。
mysql> select sum(money),avg(money) from t_group_david;
+--------------+------------+
| sum(money)   | avg(money) |
+--------------+------------+
| 319992383.84 | 246.417910 |
+--------------+------------+
1 row in set (0.94 sec)

這次算是控制在一秒以內了。

mysql> Aborted

小總結一下:分出的小表的屬性盡量越少越好。大膽的去干吧。

 

posted on 2009-06-09 13:34 肥仔 閱讀(287) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久91| 亚洲国产第一页| 经典三级久久| 欧美a一区二区| 欧美日韩精品国产| 久久精品国产成人| 玖玖精品视频| 欧美一区二区三区免费大片| 久久成人精品无人区| 一卡二卡3卡四卡高清精品视频 | 麻豆91精品| 国产精品黄视频| 欧美三区在线| 欧美成人性网| 国产精品一区二区久激情瑜伽| 老牛嫩草一区二区三区日本| 欧美日韩你懂的| 亚洲高清久久| 亚洲国产精品va在线观看黑人 | 狠狠操狠狠色综合网| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美激情一区二区三区在线视频| 欧美激情亚洲自拍| 国产美女精品视频| 亚洲国产精品久久久久婷婷884 | 日韩一级黄色av| 久久在线观看视频| 麻豆亚洲精品| 亚洲日本成人| 欧美精品在线一区| 日韩视频三区| 欧美一级视频一区二区| 国产日韩av高清| 欧美一区视频在线| 欧美成人中文字幕在线| 一区二区av| 国产美女一区| 欧美1区3d| 亚洲已满18点击进入久久| 欧美一区在线看| 亚洲国产成人在线播放| 欧美三日本三级少妇三2023| 黄色成人在线| 欧美成人一品| 亚洲一区二区三区涩| 免费一区二区三区| 日韩亚洲欧美综合| 狠狠色丁香婷婷综合| 欧美连裤袜在线视频| 小嫩嫩精品导航| 国产午夜精品一区二区三区欧美 | 亚洲经典视频在线观看| 亚洲深夜福利网站| 曰韩精品一区二区| 国产精品五月天| 欧美精品久久久久久| 久久精品1区| 午夜国产不卡在线观看视频| 亚洲精品中文字幕在线| 女仆av观看一区| 另类春色校园亚洲| 久久久国产一区二区| 亚洲影院高清在线| 亚洲欧美在线磁力| 午夜欧美精品久久久久久久| 99国产精品国产精品久久| 亚洲第一视频网站| 亚洲韩国精品一区| 99re这里只有精品6| 亚洲毛片网站| 亚洲午夜在线| 久久精品国产99精品国产亚洲性色| 亚洲欧美日韩综合国产aⅴ| 午夜亚洲视频| 久久嫩草精品久久久精品一| 欧美激情麻豆| 夜夜嗨av一区二区三区免费区| 国产一区二区剧情av在线| 欧美一区二区在线免费观看| 午夜精品一区二区三区在线 | 国产精品捆绑调教| 国产精品劲爆视频| 黄色成人av网| 亚洲视频观看| 久久成人免费网| 91久久国产综合久久| 一区二区三区国产在线观看| 久久精品国产99精品国产亚洲性色 | 午夜精品在线看| 久久午夜视频| 国产精品乱码久久久久久| 影音先锋中文字幕一区二区| 一区二区av在线| 久久青草久久| 亚洲欧美成人一区二区三区| 老司机一区二区三区| 国产精品久久婷婷六月丁香| 亚洲欧洲精品天堂一级| 久久国产精品一区二区| 在线视频精品一| 欧美日本韩国一区二区三区| 精品福利av| 久久亚洲欧美国产精品乐播| 亚洲一区二区三区视频播放| 欧美本精品男人aⅴ天堂| 亚洲精品在线视频观看| 免费日韩成人| 亚洲美女福利视频网站| 亚洲国产精品一区二区三区| 美女999久久久精品视频| 亚洲国产国产亚洲一二三| 美女露胸一区二区三区| 欧美综合国产| 亚洲国产精品va在线看黑人动漫 | 亚洲欧美一区二区三区在线| 欧美日韩免费一区二区三区视频| 影音先锋日韩有码| 欧美激情一区二区三区在线| 免费观看日韩| 亚洲一区二区三区在线播放| 亚洲视频免费在线观看| 国产精品日韩高清| 久久九九热re6这里有精品| 久久精品九九| 亚洲日本理论电影| 一区二区三区日韩欧美精品| 国产日韩欧美自拍| 亚洲国产一区二区三区a毛片| 国产精品v欧美精品v日本精品动漫 | 欧美视频你懂的| 午夜精品久久久久久99热软件| 性欧美xxxx视频在线观看| 久久精品国产在热久久| 亚洲国产你懂的| 亚洲欧美国产不卡| 一区二区三区产品免费精品久久75 | 韩日精品视频一区| 亚洲精品国精品久久99热一| 国产欧美日韩一区二区三区在线| 欧美第一黄色网| 国产亚洲aⅴaaaaaa毛片| 亚洲精品久久久久中文字幕欢迎你 | 亚洲精品欧洲精品| 亚洲欧美日韩国产精品| 亚洲尤物视频在线| 欧美人妖在线观看| 欧美高清视频免费观看| 国产精品视频免费在线观看| 亚洲美女视频在线观看| 亚洲高清一二三区| 久久只有精品| 国产欧美日韩精品一区| 9国产精品视频| 99国产精品久久久久久久| 久久久天天操| 欧美黄色一级视频| 亚洲精品乱码视频| 欧美成人精品1314www| 欧美成人免费在线| 99精品视频一区| 国产精品黄色| 欧美制服丝袜第一页| 久久综合九九| 一级日韩一区在线观看| 亚洲美女性视频| 99在线热播精品免费| 国产精品久久久99| 久久av二区| 亚洲日本在线观看| 亚洲免费在线精品一区| 韩国三级在线一区| 欧美大片在线看免费观看| 日韩一区二区精品在线观看| 欧美亚洲一区在线| 伊人成人在线| 国产精品久久久久久超碰| 久久久久成人精品| 亚洲在线国产日韩欧美| 欧美11—12娇小xxxx| 午夜在线不卡| 夜夜嗨av一区二区三区中文字幕 | 日韩一级黄色大片| 国产一二精品视频| 欧美日韩在线免费| 久久一本综合频道| 亚洲综合三区| 日韩视频专区| 最新国产成人av网站网址麻豆| 欧美一区国产一区| 亚洲视频日本| 在线视频亚洲欧美| 欧美国产高清| 欧美**人妖| 久久人91精品久久久久久不卡| 一区二区三区你懂的| 亚洲激情中文1区| 亚洲国产欧美久久| 欧美一区二区视频免费观看 | 99成人免费视频| 最新中文字幕亚洲|