mysql 9万条数据,加个简单的条件查询就要20秒,怎么优化?

以前没用过mysql,一直用mssql,几万条数据根本就没用过索引,查询秒开。
现在公司用mysql数据库,几万条数据不加索引就寸步难行,根本查不出数据出来。
比如我们有些表里面可能大部分字段都要用到条件查询,不可能只要用到条件查询的字段都加上索引吧,而且数据真的不多,就几万条。
比如这个查询,总共9万5千条数据:

SELECT COUNT( 1 ) FROM xxx;
这条查询只需0.50.9秒;

SELECT COUNT( 1 ) FROM xxx WHERE (consultType = 1);

这条加了个条件,查询出来要20秒。
consultType 字段类型是int,值只有12

我实在难以想象这么简单的查询需要20秒,网速绝对没毛病,我们公司几台服务器上的mysql数据库查询都是这个鸟样。问过很多人都说查那个字段就加索引,还是那句话,有些表很多字段都会用到条件查询,不可能用一个字段就去加个索引,那样几乎全表加索引了,再说有大量重复值的字段好像不建议加索引吧,怎么解决这个问题,望高人指点。

img

服务器上直接执行命令查询都要20秒左右,简直要命。
不晓得是不是mysql安装配置有问题,是其他人安装的,过程不得而知。

看下sql的执行计划

由于数据库不是楼主自己搭建的,所以一些参数是有必要进行查看的修正的

定位

  1. 看下有没有其他的语句也存在慢查询的清理
    show engines;
    查看慢查询时间
    show variables like 'slow%';
    查看设置多久是慢查询
    show variables like 'long%';
    修改慢查询时间
    set long_query_time=1;
    打开慢查询记录日志
    set global slow_query_log='ON';
    查看哪些线程正在运行
    show full processlist

  2. 查看连接数是否满足要求
    查看最大连接数
    show variables like '%max_connections%';
    当前连接数
    show status like 'Threads_connected%';

解决

  1. 最大连接数是否不满足当前连接数,考虑扩大?

  2. 索引优化,常用字段做索引,而且txt等数据类型不要做索引

  3. 分库分表,有的库表专门做查询

  4. 数据库开启缓存

  5. 服务器硬件升级