WEB开发网
开发学院数据库MySQL mysql性能的检查和调优方法 阅读

mysql性能的检查和调优方法

 2009-05-15 11:19:12 来源:WEB开发网   
核心提示: 1 row in set (0.00 sec)这时mysql用到了clicks索引进行查询,但是结果集比userid还要大!看来还要再进行限制:mysql> desc select * from imgs use index (clicks) where userid='ad

1 row in set (0.00 sec)

这时mysql用到了clicks索引进行查询,但是结果集比userid还要大!看来还要再进行限制:

mysql> desc select * from imgs use index (clicks) where userid='admin' and clicks>1000 order by clicks desc limit 10

+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+

| 1 | SIMPLE | imgs | range | clicks | clicks | 4 | NULL | 312 | Using where |

+----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+

1 row in set (0.00 sec)

加到1000的时候结果集变成了312条,排序效率应该是可以接受。

不过,采用换索引这种优化方式需要取一个采样点,比如这个例子中的1000这个数字,这样,对userid的每个数值,都要去找一个采样点,这样对程序来说是很难办的。如果按1000取样的话,那么userid='7mini'这个例子中,取到的结果将不会是8条,而是2条,给用户造成了困惑。

当然还有另一种办法,加入双索引:

create index userid_clicks on imgs (userid, clicks)

mysql> desc select * from imgs where userid="admin" order by clicks desc limit 10;

+----+-------------+-------+------+----------------------+---------------+---------+-------+------+-------------+

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:mysql 性能 检查

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接