魏长东

weichangdong

正在查看: mysql 分类下的文章(第 2 页 / 共 41 篇)

mongodb索引

索引是用来加快查询速度的,事物都有双面性的,同时在每次插入、更新和删除操作时都会产生额外的开销。索引有时并不能解决查询慢的问题,一般来说,返回集合中一半以上的结果,全表扫描要比查询索引更高效些。
创建太多索引,会导致插入非常慢,同时还会占用很大空间。可以通过explain和hint工具来分析。
索引有方向的,倒序还是升序。
每个集合默认的最大索引个数为64个。

1. 查看索引

»»阅读全文

MongoDB高级查询

show dbs;

 show collections;

 db.stats();

 db.clear_info.stats();

 db.clear_info.findOne({"soft_type":8});

 db.clear_info.find({"soft_type":8}).limit(1);

这四个就不用解释了,最常用的,也是最简单的。

db.collection.find({ "field" : { $gt: value } } )   // 大于  : field > value

db.collection.find({ "field" : { $lt: value } } )   // 小于  :  field < value

db.collection.find({ "field" : { $gte: value } } )  // 大于等于 : field >= value

db.collection.find({ "field" : { $lte: value } } )  // 小于等于 : field <= value

如果要同时满足多个条件,记得要这样用:

»»阅读全文

MongoDB基本使用

成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。

输入help可以看到基本操作命令:

show dbs:显示数据库列表 
show collections:显示当前数据库中的集合(类似关系数据库中的表) 
show users:显示用户

use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help():显示数据库操作命令,里面有很多的命令 
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

MongoDB没有创建数据库的命令,但有类似的命令。

如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。

»»阅读全文

thinkphp框架MySQL使用pdo

最近熟悉一个thinkphp项目,数据库连接使用的最原始的mysql_connect这一系列函数,因为之前项目多数用的是pdo,而且这个也是趋势所在,就把这个框架修改成用pdo了。

很简单,只要修改2个地方。

在config.php文件修改这两项,要是没有则添加key值。

'DB_DSN' => "mysql:host=localhost;port=3306;username=root;password=wcd;dbname=yunying",// by wcd
'DB_TYPE'    => 'pdo',

这样就ok了。因为thinkphp框架带有各种MySQL连接的类库,他会根据配置加载相应类库。

php集成环境xampp小技巧

装了xampp,第一个问题是使用MySQL的PHPmyadmin,能浏览数据库的表,但是看不了数据表的结构,提示token验证不符,解决方法是:

将你的服务器根目录下的【phpMyAdmain】文件夹的名称改成【phpmyadmin】。

如是操作问题解决。

第二个问题是,mysql通过命令行没法插入中文,也没法显示,就算从PHPmyadmin插入中文了,显示也是乱码,解决的方案是:

在phpmyadmin中的【操作】修改【排序规则】,把对应的库改成常用的utf8_general_ci。要是还是不行,就修改phpmyadmin的服务器连接排序规则。也改成上面的那个。

mysql的IN查询的数量限制

有个需求,给了一张excel表,一行847个uid,让我再数据表查询出对应uid的另一个数据。

开始想写个程序循环查,但是嫌麻烦。就想直接select  *  from  table where uid IN (1,2,3,4,5........);然后把id都弄成逗号分割,拼接成sql,放到一个sql文件。因为这个sql太长了,不好从win下复制粘贴到linux。就rz传上去,然后命令行下用source sql文件来执行,执行结果直接into outfile了。

但是查询出来的结果总数和uid的总数差3-40呢,然后第一想法就是:是不是sql的IN 里面的数据太多了。就把之前的sql分解了下,分解成两个,然后再次执行,发现结果的总数虽然多了点但是还是不够。然后我就继续分解sql,妈蛋,发现总数虽然增多,但是还是不够。

好吧,我就放弃了。如是写了程序搞定之。

但是在网上查询了下,都说IN没有数量限制。好吧,我也不清楚,难道是因为我是source执行的sql文件的原因???还有IN具体的最大个数,我也不知道。因为是在正式环境上,我也不好继续在折腾了。何况运营还等着要数据呢。

select timediff('2015-04-07 20:28','2015-04-08 11:28'); //返回两个时间的差值

linux修改时间,mysql修改时区

修改linux时间
date -s "2015-04-08 14:45:44"

clock -w//之前没有执行这一步(写入时间到cmos),重新链接,时间又回去了

修改mysql数据库时区

show variables like '%zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+

mysql时区是跟随系统的。可通过这个命令修改。

set global time_zone='+8:00';//如果不加global,重新链接mysql时区就变回去了。

linux下升级mysql

上一次用yum装了mysql,虽然一切正常,但是版本很低。5.0版本,我知道这个原因是因为我的yum源比较旧。所以就决定升级mysql。

更新YUM源

rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm

安装yum支持

yum install libmysqlclient15 --enablerepo=webtatic

停止MYsql服务

»»阅读全文

mysql性能优化[转]

1 性能瓶颈定位

Show命令

我们可以通过show命令查看MySQL状态及变量,找到系统的瓶颈:

Mysql> show status ——显示状态信息(扩展show status like ‘XXX’)

Mysql> show variables ——显示系统变量(扩展show variables like ‘XXX’)

Mysql> show innodb status ——显示InnoDB存储引擎的状态

Mysql> show processlist ——查看当前SQL执行,包括执行状态、是否锁表等

Shell> mysqladmin variables -u username -p password——显示系统变量

Shell> mysqladmin extended-status -u username -p password——显示状态信息

查看状态变量及帮助:

Shell> mysqld –verbose –help [|more #逐行显示]

 

比较全的Show命令的使用可参考: http://blog.phpbean.com/a.cn/18/

慢查询日志

慢查询日志开启:

在配置文件my.cnf或my.ini中在[mysqld]一行下面加入两个配置参数

log-slow-queries=/data/mysqldata/slow-query.log           

long_query_time=2                                                                 

注:log-slow-queries参数为慢查询日志存放的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录;

long_query_time=2中的2表示查询超过两秒才记录;

在my.cnf或者my.ini中添加log-queries-not-using-indexes参数,表示记录下没有使用索引的查询。

log-slow-queries=/data/mysqldata/slow-query.log           

long_query_time=10                                                               

log-queries-not-using-indexes                                             

慢查询日志开启方法二:

我们可以通过命令行设置变量来即时启动慢日志查询。由下图可知慢日志没有打开,slow_launch_time=# 表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加

»»阅读全文

linux下使用yum安装mysql

好一阵子没有玩虚拟机了,想在mysql上测试点东西,但是发现死活登陆不上。用

service mysqld start或者/etc/init.d/mysqld start命令都没法启动。以为是忘记密码。准备按照下面折腾下,结果提示那个文件不存在。

忘记密码:
          service mysqld stop(没有执行,因为根本就没起来)
 
          mysqld_safe --user=root --skip-grant-tables(提示mysqld_safe 不存在
 
          mysql -u root
 
          use mysql
 
          update user set password=password("new_pass") where user="root";
 
          flush privileges; 
那想着重装吧!

rpm -qa|grep mysql 查询,然后卸载之前的。rpm -e mysql-5.0.95-5.el5_9

»»阅读全文