mysql innodb count(*)速度慢且不准确的解决办法
innodb引擎在统计方面和myisam是不同的,Myisam内置了一个计数器,所以在使用 select count(*) from table 的时候,直接可以从计数器中取出数据。而innodb必须全表扫描一次方能得到总的数量。要初步解决这个问题,需要做不同于myisam的一些工作:
1、使用第二索引(一般不使用主键索引),并且添加where条件,如:
show index from product ;
id primary key
comp_id index
2、如果只需要粗略统计的话也可使用
show status from product; 来得到大约值
这种方法可在数据分页中使用!
3、使用外部计数器,比如建立一个触发器来计数或者在程序上使用缓存方式定时计数,缺陷是这些方法会额外消耗一些资源!
===========================
我们知道当mysql采用InnoDB时,count表的记录数随时都会发生变化,特别是在delete和insert比较频繁的时候,这个问题以前注 意过,但由于很长时间没关注,忘了,今天特别在服务器上测试了一下,每次count时都会出现一个很离谱的统计数(select count(*) from user)
解决方法有一下几种,欢迎补充:
1、通过统计全表记录数时在where后面加一个有索引的字段作为条件来查询全表数据,如:select count(tid) from posts where tid>0; tid不为主键,tid有索引
2、采用InnoDB的表插入数据,不删除,删除数据通过一个字段来标识,isDel=1表示删除0表示正常,这样select count(*) from posts 的数据相对准确一些
3、通过计数器来记录表的数据总行数,添加是增1,删除时减1;这样获取表记录数是最快的,而且是最复杂的
mysql innodb count(*)速度慢且不准确的解决办法的更多相关文章
- MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法 1 问题 [root@localhost m ...
- Mysql安装错误:Install/Remove of the Service Denied!解决办法
Mysql安装错误:Install/Remove of the Service Denied!解决办法 在windos 的cmd下安装mysql 在mysql的bin目录下面执行: mysqld -- ...
- MySQL 执行SQL脚本 报ERROR 1231 (42000)的解决办法【转】
今天在source mysqldump 备份文件时,发现导入的过程中报如下的错误: ERROR 1231 (42000): Variable 'time_zone' can't be set to t ...
- mysql 5.7.20 server status 是stopped的解决办法
mysql 5.7.20 server status 是stopped的解决办法 在安装mysql 5.7.20的过程中,前几个过程都没什么问题,但是最后一个步骤就出问题了.当check一直提示con ...
- 远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
远程连接MySQL错误"plugin caching_sha2_password could not be loaded"的解决办法 问题描述: 今天在阿里云租了一个服务器,当我用 ...
- Mysql删除数据后磁盘空间未释放的解决办法【转】
转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...
- 转 MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法
http://blog.sina.com.cn/s/blog_637e04c9010117ri.html 1 问题 [root@localhost mysql]# /etc/rc.d/init.d/m ...
- mysql使用联合索引提示字符长度超限制解决办法
mysql在创建数据库的时候,字符集设置的不是utf8而是utf9mb4,在导入sql脚本的时候,发现提示如下错误: 从上图中,我们可以看出,使用的是innodb及字符集.错误提示是长度太长了 ...
- MySql卸载重新安装出现Start service没有响应的解决办法(64位)
昨天因为自己手欠,不小心把mysql卸载了,于是又得重新安装,但是每次到了最后一步就报没有响应,于是就去寻找解决办法,如下就是啦! 安装Mysql卸载后又重新安装,每次到最后Start service ...
随机推荐
- windows编程之窗口抖动
仅仅让黑窗口抖动以供小白娱乐 #include<stdio.h> #include<windows.h> int main() { RECT rect;//RECT定义了一个矩 ...
- 身高安排方法(基础dfs)
P1085 时间限制: 0 Sec 内存限制: 128 MB提交: 64 解决: 44[提交][状态][讨论版][命题人:外部导入] 题目描述 Matrix67发现身高接近的人似乎更合得来.Mat ...
- word搜狗输入失效切换方法
- Centos7下的systemctl命令与service和chkconfig
博主使用的操作系统是最新的CentOS 7,所以可能和网上一些老的博文有一定出入,那是因为版本更新的原因. 这里写图片描述1 service service命令用于对系统服务进行管理,比如启动(sta ...
- Android 获取手机内部信息,内核版本、基带版本、内部版本等
TextView text = (TextView) findViewById(R.id.textView1); String phoneInfo = "Product: " + ...
- ArcMap VBA实现连续编号
连续编号VBA部分:Static lCount as longlCount=lCount+1赋值部分:lCount (从1开始)lCount-1 (从0开始)
- Linux下安装与卸载anaconda
安装:到安装文件夹的目录下输入 bash Anaconda3-4.1.1-Linux-x86_64.sh 卸载:输入
- vue事件深入
事件对象: @click="show($event)" ev.clientX---接收 事件冒泡: 阻止冒泡: 1. ev.cancelBubble=true; 2.@click. ...
- 【Unix网络编程】chapter7套接字选项
7.1 概述 有很多方法来获取和设置影响套接字的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 7.2 getsockopt和setsockopt函数 7.3 ...
- JavaBean转xml
JavaBean转xml的工具就是:XStream XStream的作用: XStream可以把JavaBean对象转换成XML!通常服务器向客户端响应的数据都是来自数据库的一组对象,当我们不能直接把 ...