以前没用过mysql,一直用mssql,几万条数据根本就没用过索引,查询秒开。
现在公司用mysql数据库,几万条数据不加索引就寸步难行,根本查不出数据出来。
比如我们有些表里面可能大部分字段都要用到条件查询,不可能只要用到条件查询的字段都加上索引吧,而且数据真的不多,就几万条。
比如这个查询,总共9万5千条数据:
SELECT COUNT( 1 ) FROM xxx;
这条查询只需0.5到0.9秒;
SELECT COUNT( 1 ) FROM xxx WHERE (consultType = 1);
这条加了个条件,查询出来要20秒。
consultType 字段类型是int,值只有1和2;
我实在难以想象这么简单的查询需要20秒,网速绝对没毛病,我们公司几台服务器上的mysql数据库查询都是这个鸟样。问过很多人都说查那个字段就加索引,还是那句话,有些表很多字段都会用到条件查询,不可能用一个字段就去加个索引,那样几乎全表加索引了,再说有大量重复值的字段好像不建议加索引吧,怎么解决这个问题,望高人指点。
服务器上直接执行命令查询都要20秒左右,简直要命。
不晓得是不是mysql安装配置有问题,是其他人安装的,过程不得而知。
看下sql的执行计划
由于数据库不是楼主自己搭建的,所以一些参数是有必要进行查看的修正的
看下有没有其他的语句也存在慢查询的清理
show engines;
查看慢查询时间
show variables like 'slow%';
查看设置多久是慢查询
show variables like 'long%';
修改慢查询时间
set long_query_time=1;
打开慢查询记录日志
set global slow_query_log='ON';
查看哪些线程正在运行
show full processlist
查看连接数是否满足要求
查看最大连接数
show variables like '%max_connections%';
当前连接数
show status like 'Threads_connected%';
最大连接数是否不满足当前连接数,考虑扩大?
索引优化,常用字段做索引,而且txt等数据类型不要做索引
分库分表,有的库表专门做查询
数据库开启缓存
服务器硬件升级