mysql数据库如何优化几百万数据表的查询?

多表关联查询,其中一张表有几百万条数据,然后通过时间筛选近3个月的数据,但是数据库库存的时间字段是varchar的,得转成时间类型,这样是不是不能走索引了?用explain看到的结果是走了全表扫描,查询的时间非常长,不知道有什么好的优化方案?
目前写的查询语句大概类似于这样的,C表就是大数据量的表:
select A.*
from A
inner join B on B.eid=A.eid
left join (
select eid from C where STR_TO_DATE(time, '%Y-%m-%d') > DATE_ADD(NOW(), INTERVAL -3 MONTH)) C on C.eid=B.eid

阅读 2.7k
3 个回答

你varchar你什么格式?

再加个int类型时间戳字段,把数据批量生成一下,然后就能走索引了。
数据量大时,sql要尽量简单

试一下这样

SELECT
    A.*
FROM
    A
INNER JOIN B ON B.eid = A.eid
LEFT JOIN (
    SELECT
        eid
    FROM
        C
    WHERE
        time > DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - 3 MONTH),'%Y-%m-%d')
) C ON C.eid = B.eid
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进