请教Mysql性能优化的问题
发布于 2 个月前 作者 Treagzhao 746 次浏览 来自 问答

我有一个表有大约1000W条数据,我有一个sql语句是这样的:

SELECT column_1 FROM table_name WHERE column_2 IN 	('A','B')  ORDER BY  id;

column2这个字段是varchar类型,有索引,id是主键。我这个语句用 EXPLAIN 分析,发现排序用到了 using file sort 。 请问我想实现同样的功能,怎样才能避免 using filesort?

ps: 顺便请问有没有可以系统学习mysql索引优化的书籍,谢谢。

14 回复

IN 的效率好像不是很高。 如果只有2个值,试试2条SQL语句 看看总时间是多少?

  • IN 中的条件应该不多吧,去掉 order by 试试,它们用了不同的索引。
  • 不过,上面说的情况,那个 file sort 无关紧要的, 大头在 IN ,如果已经使用了索引就没问题了。
  • 单表 1000w 这个量,放弃社区版的 MySQL 吧。

@imhered 两个其实只是举例子,真实的情况可能会有很多

@yszou 去掉order by 就不能排序了啊 而且如果不用order by 只有In 是非常快的,能够用到 column_2上的索引 然鹅就是不能排序

@Treagzhao

  1. 我的意思是,去掉 order by 是不是就没有 file sort 了。
  2. SQL 不排序你应用层自己排就是了嘛。

@yszou 是的 去掉orderby 就没有file sort 了

@yszou 这张表有1000W条数据······我应用层排序亚历山大啊·····

有1000w数据应该不代表你需要取出来1000w条嘛,可以评估一下数据量,不大应用层排序没有问题

@TreagzhaoIN 之后,哪会有 1000w 条嘛。

mysql这玩具普通开发者没啥可折腾的。商业的用mssql,ora,免费的用pg。早换早解脱

很久没做数据库优化了,你试试复合索引吧<column_2, id>,不确定是否有用

@yszou 即使有搜索条件 也基本不会少于20W

回到顶部