免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2173 | 回复: 3
打印 上一主题 下一主题

康盛ucenter 的uchome表 索引问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-17 09:42 |只看该作者 |倒序浏览
用的discuz 7.0 和ucenter 1  开始uchome_pic 好像没有索引,后来加了几个 但效果不是很理想

表有800w 记录  执行 sql 效率很差,请高手看下,加大索引是否合理 感谢

表结构

mysql> desc uchome_pic;
+----------+-----------------------+------+-----+---------+----------------+
| Field    | Type                  | Null | Key | Default | Extra          |
+----------+-----------------------+------+-----+---------+----------------+
| picid    | mediumint(          | NO   | PRI | NULL    | auto_increment |
| albumid  | mediumint( unsigned | NO   | MUL | 0       |                |
| uid      | mediumint( unsigned | NO   | MUL | 0       |                |
| dateline | int(10) unsigned      | NO   | MUL | 0       |                |
| postip   | char(20)              | NO   |     |         |                |
| filename | char(100)             | NO   |     |         |                |
| title    | char(150)             | NO   |     |         |                |
| type     | char(20)              | NO   |     |         |                |
| size     | int(10) unsigned      | NO   |     | 0       |                |
| filepath | char(60)              | NO   |     |         |                |
| thumb    | tinyint(1)            | NO   |     | 0       |                |
| remote   | tinyint(1)            | NO   |     | 0       |                |
+----------+-----------------------+------+-----+---------+----------------+


现在uchome_pic 的索引信息
mysql> show index from uchome_pic;
+------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table      | Non_unique | Key_name        | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| uchome_pic |          0 | PRIMARY         |            1 | picid       | A         |     8064619 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | albumid         |            1 | albumid     | A         |      161292 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | albumid         |            2 | dateline    | A         |     4032309 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | dateline        |            1 | dateline    | A         |     4032309 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | ind_albumid_uid |            1 | albumid     | A         |      161292 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | ind_albumid_uid |            2 | uid         | A         |      168012 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | ind_uid         |            1 | uid         | A         |       26528 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | ind_uid_picid   |            1 | uid         | A         |       26528 |     NULL | NULL   |      | BTREE      |         |
| uchome_pic |          1 | ind_uid_picid   |            2 | picid       | A         |     8064619 |     NULL | NULL   |      | BTREE      |         |
+------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

慢查询中出现在 4条关于uchome_pic的语句

SELECT * FROM uchome_pic WHERE albumid='0' AND uid='39706' AND picid<10096588 ORDER BY picid DESC LIMIT 1
SELECT * FROM uchome_pic WHERE albumid='441736' ORDER BY dateline DESC LIMIT 1640,20;
SELECT * FROM uchome_pic WHERE uid='300967'  ORDER BY picid DESC  LIMIT 120,20;
SELECT * FROM uchome_pic WHERE picid='4385852' AND uid='419518' LIMIT 1;




各个语句的执行计划
mysql> explain SELECT * FROM uchome_pic WHERE albumid='0' AND uid='39706' AND picid<10096588 ORDER BY picid DESC LIMIT 1;
+----+-------------+------------+-------+-------------------------------------------------------+---------+---------+------+---------+-------------+
| id | select_type | table      | type  | possible_keys                                         | key     | key_len | ref  | rows    | Extra       |
+----+-------------+------------+-------+-------------------------------------------------------+---------+---------+------+---------+-------------+
|  1 | SIMPLE      | uchome_pic | range | PRIMARY,albumid,ind_albumid_uid,ind_uid,ind_uid_picid | PRIMARY | 4       | NULL | 6017629 | Using where |
+----+-------------+------------+-------+-------------------------------------------------------+---------+---------+------+---------+-------------+
1 row in set (0.00 sec)

mysql> explain  SELECT * FROM uchome_pic WHERE albumid='441736' ORDER BY dateline DESC LIMIT 1640,20;
+----+-------------+------------+------+-------------------------+---------+---------+-------+------+-------------+
| id | select_type | table      | type | possible_keys           | key     | key_len | ref   | rows | Extra       |
+----+-------------+------------+------+-------------------------+---------+---------+-------+------+-------------+
|  1 | SIMPLE      | uchome_pic | ref  | albumid,ind_albumid_uid | albumid | 3       | const | 1617 | Using where |
+----+-------------+------------+------+-------------------------+---------+---------+-------+------+-------------+


mysql> explain SELECT * FROM uchome_pic WHERE uid='300967'  ORDER BY picid DESC  LIMIT 120,20;
+----+-------------+------------+------+-----------------------+---------------+---------+-------+-------+-------------+
| id | select_type | table      | type | possible_keys         | key           | key_len | ref   | rows  | Extra       |
+----+-------------+------------+------+-----------------------+---------------+---------+-------+-------+-------------+
|  1 | SIMPLE      | uchome_pic | ref  | ind_uid,ind_uid_picid | ind_uid_picid | 3       | const | 39668 | Using where |
+----+-------------+------------+------+-----------------------+---------------+---------+-------+-------+-------------+


mysql> explain SELECT * FROM uchome_pic WHERE picid='4385852' AND uid='419518' LIMIT 1;
+----+-------------+------------+-------+-------------------------------+---------+---------+-------+------+-------+
| id | select_type | table      | type  | possible_keys                 | key     | key_len | ref   | rows | Extra |
+----+-------------+------------+-------+-------------------------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | uchome_pic | const | PRIMARY,ind_uid,ind_uid_picid | PRIMARY | 4       | const |    1 |       |
+----+-------------+------------+-------+-------------------------------+---------+---------+-------+------+-------+

论坛徽章:
0
2 [报告]
发表于 2011-05-17 18:21 |只看该作者
回复 1# spark_zhang

可否提供下面语句的结果?
select count(*)  from uchome_pic WHERE uid='39706' ;

论坛徽章:
0
3 [报告]
发表于 2011-05-18 16:04 |只看该作者
8,090,001

论坛徽章:
0
4 [报告]
发表于 2011-05-18 16:18 |只看该作者
回复 3# spark_zhang


    那么大啊,那就看下select count(*)  from uchome_pic WHERE albumid='0' AND uid='39706' ; 查询出是多少,如果不大的话,制定albumid,uid联合索引,应该会快一点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP