8000W+的数据,java+mysql怎么才能快速查询

select * from xxxxx where Message REGEXP ? and AuthorDate >= ? and AuthorDate <= ?
现在语句是这样子。查询时间很长,请教。

建立索引,查询一下执行计划

最好不要select,查询最多的字段建立index索引,select而且不加索引是全表扫描是all级别的,也是最慢的

  1. 这个表的目前的DDL语句是否可以发一下,以便了解具体的情况
  2. 数据在AuthorDate字段的粒度不清楚到什么精度,天,时,分,秒,精度越高越好,在此字段上创建索引。
  3. REGEXP可能要处理的是复杂的正则数据过滤,也有可能是简单的数据过滤,如果可以使用 like 'char%'最好
  4. 数据量如果实在太大,考虑按月分表,对表中的对应字段创建索引,动态sql的组成由 union all 进行处理,多个select的判定由传入的日期起止来判定,不仅要数据库想办法,后端进行动态sql的拼写的时候,也要出点力才可以。

单表数据8000w?神仙来了也不好使啊。印象中REGEXP也不会走索引(待考证)。
我大概get到你想查什么,不做大改的话,可以这样考虑。
1.看看AuthorDate有没有做索引,有的话,把这个条件放前面去,看看会不会走索引。
2.如果你可以缩小查询范围,比如只查询几天的数据,评估一下数据量,如果不大(比如在几千的数量级),可以只基于AuthorDate把全部结果查出来,放内存里面,在进行模糊检索。
最终还是要做分库分表的。

可以去看看有关mysql性能优化的资料;解决方案挺多的