在歌手和歌名字段上做索引,另外查询的时候应写明查询字段,不要用*代替。

解决方案 »

  1.   

    1。比较具有相同类型的列。
    2。比较中应尽量使索引列独立。
    3。在like模式的起始处不要使用通配符
       例如:where name like "%string%"
            优化为:where name like "string%"
    4。帮助优化程序更好的评估索引的有效性
       可用isamchk 或 myisamchk 的--analyze选项给优化程序提供更好的信息,以便分析键值的分布。
    5。利用EXPLAIN检验优化程序操作。
       检查用于查询中的索引是否能很快的排除行创建索引
    建索引的目的是为了更好的查询,但是不要盲目建索引,有时候适得其反。
    遵循这样的原则:
    1.搜索的索引列,不一定是索要选择的列
      例如:select col_a from tbl1 left join tbl2 on   tbl1.col_b=tbl2.col_c
      where col_d=expr
    在这查询重视合作索引列的是tbl1.col_b and tbl2.col_c and col_d
    2.使用唯一索引:对于唯一值的列,索引的效果最好,而具有多个重复值的列
      其索引效果最差。
    3.使用短索引:应该指定一个前缀的长度,只要有可能就应该这样做
      例如:varchar(100)列,对前10个或者20个字符内,多数值是唯一的那就不要对整个列索引。
    4.利用最左索引:在创建n列的索引时,实际是创建了mysql可利用的n个索引,多列索引可以起几个索引的作用,因为可以利用索引中最左边的列集来匹配。
     ps: mysql不能使用不涉及左前缀的搜索。
    5.不要过渡索引:
      每个额外的索引都是要占额外的磁盘空间,并降低写操作的性能。
    6.考虑在列上进行比较的类型:
      索引可用于"<"、"<="、"="、">="、">"和 between 运算。本人卓见,仅供参考!
      

  2.   

    表中的歌手和歌曲有重复部分。不知道可否在这里做文章呢??