日期:2014-05-16  浏览次数:20701 次

索引问题
请教各位老大,我有个数据表有20多万测试数据,有4个分类,通过分类id来查询数据,但是我发现不在分类id建索引时,有些分类查询快,有些查询慢,比如有个分类有50000条记录,查询时间0.8左右,有个分类数据只有30000多却要2秒多,我就在分类添加索引,可是发现原来慢的现在变快了,原来快的现在却变慢了,用EXPLAIN检查查询语句,发现有的分类使用索引,而有的没使用,还有,发现索引的数量只有在单数时才更新,就是说如果商品表中有4类商品,那么索引数只显示为3,如果我在添加一个分类商品,那么它就正常了,显示为5
查询语句:select   字段列表   from   goods   where   goods_sort   in(3)   order   by   goods_id   desc

------解决方案--------------------
是否使用索引,是和你返回的纪录数有关的。
------解决方案--------------------
MySQL是否使用索引是和查询结果的记录数有关的。一般来说,如果查询结果集如果超过整个表行数的某个比例,MySQL就会放弃使用索引,而直接表扫描。
为什么要这么做呢?是因为当结果集很大时,使用索引反倒会慢。因为MySQL首先搜索索引,而后根据索引再搜索表中记录,相当于先读取索引记录,再根据索引记录读取表记录,而索引记录又没有有效的减少所要搜索的表记录,所以就慢了。不知道我说明白了没有,谢谢