1. 程式人生 > >MySQL(三) —— MySQL效能優化之 索引優化

MySQL(三) —— MySQL效能優化之 索引優化

MySQL索引優化

如何選擇合適的列建立索引?

在where從句、group by 從句、order by 從句、on 從句中出現的列

索引欄位越小越好

離散度大的列放在聯合索引的前面

如何判斷列的離散度?

去重查詢看列的唯一值,唯一值越多則離散度越大。

mysql> desc account.user_info;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| account       | varchar(128) | YES  | MUL | NULL    |                |
| serverid      | int(11)      | YES  | MUL | 0       |                |
| channel       | varchar(128) | YES  | MUL | NULL    |                |
| sub_channel   | varchar(128) | YES  |     | NULL    |                |
| plat          | varchar(128) | YES  |     | NULL    |                |
| udid          | varchar(128) | YES  |     | NULL    |                |
| ip            | varchar(512) | YES  |     | NULL    |                |
| logdate       | datetime     | YES  |     | NULL    |                |
| createdate    | datetime     | YES  |     | NULL    |                |
| vip_lv        | int(11)      | YES  |     | 0       |                |
| recharge      | int(11)      | YES  |     | 0       |                |
| last_serverId | int(11)      | YES  | MUL | 0       |                |
+---------------+--------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)

 

SELECT COUNT(DISTINCT serverid),count(distinct channel) FROM account.user_info;

mysql> SELECT COUNT(DISTINCT serverid),count(distinct channel) FROM account.user_info;
+--------------------------+-------------------------+
| COUNT(DISTINCT serverid) | count(distinct channel) |
+--------------------------+-------------------------+
|                       17 |                      19 |
+--------------------------+-------------------------+
1 row in set (0.00 sec)
mysql>  SELECT COUNT(1) FROM account.user_info WHERE channel='mmo_no_ajzz' AND serverid=1;
+----------+
| COUNT(1) |
+----------+
|       39 |
+----------+
1 row in set (0.00 sec)