我有个学生信息表。students(id,name,sex,age,address).
其中sex为性别,其值为0或者1分别代表男和女。
此表有五十万条记录。
我想从中筛选出所有男性学生。
那么语句应该写为select name from students where sex=0.
但是这样的话会造成全表扫描。速度特别慢。
而在该字段又只有两个值属于重复率特别高的字段,建立索引又不合适。
我该怎么做呢才能是的我的查找速度更快呢?

解决方案 »

  1.   

    可以这样理解吧:你的要求就是sex=0的记录的话,“速度特别慢”这里的慢不慢在查找上,而是慢在i/o上,因为有大量的记录被命中,需要大量的i/o操作。所以,确实没什么太好的办法。分区也好分表也好,改善有限。因为他们改善的是查找。而不是i/o,你想想有什么办法改善i/o的吧。比如更快的磁盘?等等
      

  2.   

    补充:如果是给程序使用的话,比如php使用,那么php中允许加载第一条记录就立即返回给程序。也许别的语言也有类似的应用,起码在用户端体验会改善不少。参见mysql_unbuffered_query()。