版权声明:ClearBoy 版权 https://blog.csdn.net/qq_41677196/article/details/83547580
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)