易截截图软件、单文件、免安装、纯绿色、仅160KB

Mysql中count(*),DISTINCT的使用方法和效率研究

在处理一个大数据量数据库的时候
突然发现mysql对于count(*)的不同处理会造成不同的结果
比如执行
SELECT count(*) from tablename
即使对于千万级别的数据mysql也能非常迅速的返回结果
而对于
SELECT count(*) from tablename WHERE…..
mysql的查询时间开始攀升
仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候
MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索
从而得出count的数值
突然又想起来看到的不少新兴的php程序对于count的处理并没有很好的意识到这点
记录下
顺便提下mysql的DISTINCT的关键字有很多你想不到的用处
1.在count 不重复的记录的时候能用到
比如SELECT COUNT( DISTINCT id ) from tablename;
就是计算talbebname表中id不同的记录有多少条
2,在需要返回记录不同的id的具体值的时候可以用
比如SELECT DISTINCT id from tablename;
返回talbebname表中不同的id的具体的值
3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
比如SELECT DISTINCT id, type from tablename;
实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样
4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的
5.其实还有另外一种解决方式,就是使用
SELECT id, type, count(DISTINCT id) from tablename
虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据)
返回的结果是 只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了
PS:
越来越发现有很多细节是需要去探究的,
越来越发现自己写文字真的很杂乱,
有空研究下DISTINCT的效率


相关文档:

mysql 子查询删除记录

    mysql 可以通过子查询得到要删除的记录条件,然后通过子查询得结果匹配要删除的记录。但是 mysql 不能直接删除子查询表中的数据,必须通过一个临时表来解决。例如:
    delete from t_transaction where exists
    (select d.* from t_ti_category a,t_category b,t_ ......

Mysql 关键字 保留字

Mysql 关键字-保留字
在powerdesigner设计的时候用了关键字,生成出错,很囧。。。
 
 
 
 
 
ADD
ALL
ALTER
ANALYZE
AND
AS
ASC
ASENSITIVE
BEFORE
BETWEEN
BIGINT
BINARY
BLOB
BOTH
BY
CALL
CASCADE
CASE
CHANGE
CHAR
CHARACTER
CHECK
COLLATE
COLUMN
CON ......

mysql 命令使用

mysql 命令学习:
1. mysql -uroot  ;
2.mysql -h ip -ubusiusr -pbusiusr newdrmdb;
3.show databases ;                 //显示所有的数据库 ;
4.show tables ;           ......

MySQL命令行中文乱码问题解决

问题:
1、数据库默认的字符集设置为UTF-8;
2、通过ibatis读写数据中文正常;
3、但是用windows命令行执行select语句中文显示乱码。
解决:
数据库用户登录时参数设定字符集:
mysql --default-character-set=gb2312 -u 用户名 -p
(估计和windows的cmd命令行有关) ......

MYSQL外键(Foreign Key)的使用(二)

作者:Dirk (dirk.ye AT gmail.com)
Url:http://dirk.pdx.cn
日期:2004/12/08
首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用
InnoDB引擎。
下面,我们先创建以下测试用数据库
表:
CREATE TABLE `roottb` (
`id` INT(11) UNSIGNED AU ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号