索引引用不到(求高手赐教)

guoyang842 2012-05-29 06:43:47
create table aa(
aa_date date,
aa_server int(2),
key aa_date(date)
);
insert into aa('2011-11-03',0);



查询
explain select * from aa where aa_date>=?;
或者
explain select * from aa where aa_date<=?;

后面的查询离职检索出的列超过一定数量就不会引用索引了,>=超过230就不会引用索引了,type是all,后面的说明也没有用到索引

而写成
explain select date from aa where aa_date<=?;
又可以引用到,怎么样在查询全部字段的情况下用到索引。

求高手解释并赐教谢谢
...全文
59 点赞 收藏 10
写回复
10 条回复
小小小小蜗牛 2012年06月04日
找了下 找不到 你不用主键 用index看看
回复 点赞
ACMAIN_CHM 2012年05月30日
[Quote]每个表的索引被查询,并且使用最好的索引,除非优化器认为使用表扫描更有效。是否使用扫描取决于是否最好的索引跨越超过30%的表。优化器更加复杂,其估计基于其它因素,例如表大小、行数和I/O块大小,因此固定比例不再决定选择使用索引还是扫描。
[/Quote]
回复 点赞
ACMAIN_CHM 2012年05月30日
当MYSQL认为符合条件的记录所占的比例较大时,MYSQL就不会再使用索引,而是直接全面扫描。
回复 点赞
guoyang842 2012年05月30日
内网的数据,贴不出来。就是随便插几百天的数据,当查询条件的天数占数据中大部分时,索引引用不到
explain查出来的数据 key是null,type 也是all row是检索了全表行数
回复 点赞
Rotel-刘志东 2012年05月30日
贴出执行计划。
回复 点赞
guoyang842 2012年05月30日
没有人知道吗,怎么样才可以使用到索引
回复 点赞
Rotel-刘志东 2012年05月30日
mysql的数据量比较大,符合条件的记录比较多的时候,mysql
全表扫描时不走索引的。
回复 点赞
Rotel-刘志东 2012年05月30日
当mysql的数据量条件中占的比例比较大时候,是不走索引的。
回复 点赞
guoyang842 2012年05月30日
[Quote=引用 6 楼 的回复:]

引用每个表的索引被查询,并且使用最好的索引,除非优化器认为使用表扫描更有效。是否使用扫描取决于是否最好的索引跨越超过30%的表。优化器更加复杂,其估计基于其它因素,例如表大小、行数和I/O块大小,因此固定比例不再决定选择使用索引还是扫描。
[/Quote]
请问有在查询时指定使用这个索引的措施吗?
回复 点赞
rucypli 2012年05月29日
用不到索引说明mysql考虑到走索引的消耗比不走索引更大
回复 点赞
发动态
发帖子
MySQL
创建于2007-09-28

2.4w+

社区成员

5.5w+

社区内容

MySQL相关内容讨论专区
社区公告
暂无公告