MySQL(三) —— MySQL效能優化之 索引優化
阿新 • • 發佈:2018-11-04
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)