手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:DataBase

字符与字节

对于数据库来说,开发人员可能更多的属于不明真相的围观群众这类人。对于字段长度或许都有所了解,对于不同的字符集所占的位数也会明白一些,但究竟是不是你想象的那样,你又真的了解多少?

看看人家玄月写的文章吧。不要不承认,其实你我都一样,都是知其然不知其所以然,而且都是看着书然后人云亦云。有时候不测试不亲自动手是看不到真相的。当然我也仅转载。我也没有测试,其实我就在真相门外徘徊。

原文如下:

字符与字节的问题
1、表t1
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`a` char(1) DEFAULT NULL,
`b` binary(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk

1)插入数据:
mysql> insert into t1 values(’w',’w'),(’中’,'中’);

mysql> select * from t1;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | ? |
+——+——+

2)插入数据被截断:
mysql> insert into t1 values(’xy’,'xy’),(’中国’,'中国’);
Query OK, 2 rows affected, 4 warnings (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 4

mysql> select * from t1;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | ? |
| x | x |
| 中 | ? |
+——+——+

2、表t2
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`a` char(2) DEFAULT NULL,
`b` binary(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk

1)插入数据:
mysql> insert into t2 values(’w',’w'),(’中’,'中’);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from t2;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | 中 |
+——+——+
2 rows in set (0.01 sec)

mysql> insert into t2 values(’xy’,'xy’),(’中国’,'中国’);
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 1

mysql> select * from t2;
+——+——+
| a | b |
+——+——+
| w | w |
| 中 | 中 |
| xy | xy |
| 中国 | 中 |
+——+——+

总结: char以字符来计算,一个中文一个英文都是占1个字符;
Binary以字节来计算,一个英文占1个字节,一个中文占2个字节。

原文地址:http://rdc.taobao.com/blog/dba/html/324_%e5%ad%97%e7%ac%a6%e4%b8%8e%e5%ad%97%e8%8a%82.html

TaobaoDBA的一些关于INNDB的文章

淘宝DBA最近发力挺多的。很多关于innodb和myisam等数据库格式的性能测试。
不信?看图吧。

大小: 32.66 K
尺寸: 340 x 222
浏览: 1886 次
点击打开新窗口浏览全图

看到这么多,你还能怎么说?还不上去看看?

本来想一一截取下来做记录的,但是发现太多了。呵呵,请自己上线看吧。

网址为:http://rdc.taobao.com/blog/dba

我会采用ScrapBook抓取一份,然后打个包上传,如果有人使用ScrapBook,可以直接导入。

文件地址为:

 scrapbook.rar

Wordpress MYSQL数据库优化技巧

一直在考虑是不是要换到wordpress, sablog用了这么长时间,也算是有感情了的。只是,他一直不更新,而且前台模板用的那种定界符做模板处理,我很不习惯。
以前coolcode.cn也是用的wordpress,后来转到了sablog上面。如今,我却想转到wordpress上面。。。不知道是进步还是退步。

也曾想过重写前台,请了两个朋友帮我做页面,结果现在是程序写了一半,页面做了一半,离完成看来是遥遥无期了。。

所以,记录下这个文章,方便以后真的要转换的时候,也能做个参考。。

» 阅读全文

Tags: wordpress, mysql, 优化

taobaoDBA关于MyISAM和InnoDB的插入性能的测试

innodb和myisam两种类型的表,是mysql的基础表。很多人为了选择该使用哪 种表而头疼。
一般来说innodb对事务的支持比较好,而myisam则一般,innodb是行锁,mysql是表锁。但。。。下面这个测试却:
原文:http://rdc.taobao.com/blog/dba/html/295_insert_benchmark_for_myisam_and_innodb.html
作者:陶方
内容:

测试表结构:
CREATE TABLE `test` (
`ID` bigint(20) NOT NULL auto_increment,
`INT_A` int(11) default NULL,
`INT_B` int(11) default NULL,
`INT_C` int(11) default NULL,
`STRING_A` varchar(50) default NULL,
`STRING_B` varchar(250) default NULL,
`STRING_C` varchar(700) default NULL,
PRIMARY KEY (`ID`),
KEY `IDX_TEST_IA` (`INT_A`),
KEY `IDX_TEST_IB` (`INT_B`),
KEY `IDX_TEST_SA` (`STRING_A`,`INT_C`)
) ;

数据量:总共10个表,每个表插入400w数据
并发数:每个表并发20个线程去执行插入操作,总共200个线程
数据特点:除了主键采用自增外,索引相关字段全是随机生成的。字符串的长度和内容都是随机的,平均长度为预定义的一半
大小: 43.35 K
尺寸: 498 x 376
浏览: 2572 次
点击打开新窗口浏览全图
大小: 39.66 K
尺寸: 498 x 376
浏览: 2412 次
点击打开新窗口浏览全图
大小: 26.79 K
尺寸: 498 x 376
浏览: 2621 次
点击打开新窗口浏览全图
X轴是unix时间戳,Y轴是十秒钟的插入量。从以上测试结果可以看出,InnoDB的插入性能随着数据量的增多一直在下降,而且表现相当不稳定。MyISAM的表现还是比较好的,虽然瞬时插入的谷值一直在下降,但是整体表现很稳定。
总的来说,Ext3的cache算法性能还是非常不错的,不愧是linux上面备受推崇的文件系统。InnoDB虽然提供了高可用性,但是插入性能方面的表现并不如MyISAM稳定。

--EOF--
对于这个图是什么生成的,我也很有兴趣。。。。目前未知

Tags: mysql, myisam, innodb, 性能, taobaodba

mysql命令行常用命令

这是某人整理的东西,发现还是挺有用的。。

它来自于PHP博客,看着挺有用。值得摘抄

mysql命令行常用命令

第一招、mysql服务的启动和停止
net stop mysql
net start mysql

第二招、登陆mysql
语法如下: mysql -u用户名 -p用户密码
键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:
mysql>
注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

第三招、增加新用户
格式:grant 权限 on  数据库.* to 用户名@登录主机 identified by "密码"
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。
如果你不想user1有密码,可以再打一个命令将密码去掉。
grant select,insert,update,delete on mydb.* to user1@localhost identified by "";

第四招: 操作数据库
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。
1、 显示数据库列表。
show databases;
缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2、 显示库中的数据表:
use mysql;
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库与删库:
create database 库名;
drop database 库名;
5、 建表:
use 库名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中记录:
delete from 表名;
7、 显示表中的记录:
select * from 表名;

第五招、导出和导入数据
1. 导出数据:
mysqldump --opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。
2. 导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。
3. 将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;

 

MySQL 包括一个服务器进程管理数据库,以及一系列访问数据库和创建应用的工具:

mysql               : 在 MySQL 中执行 SQL 查询,也可以执行在文件中存储的SQL命令;
mysqlaccess  : 管理用户;
mysqladmin   : 管理数据库服务器,包括数据库的创建和移除;
mysqld            : 实际的 MySQL 服务器进程;
mysqldump    : 将数据库或表的定义和内容转储到文件;
mysqlhotcopy : 热备份;
mysqlimport   : 将不同文件格式的数据导入到 MySQL 表中;
mysqlshow    : 显示服务器或者任何对象(数据库和表)的信息。

mysql_secure_installation  :  用于管理 root 密码,远程访问、移除临时(测试)数据库及临时用户的一个脚本。

一般来讲,Root 应只用于数据库本机上登录 MySQL,我们可以增加一个拥有超级管理权限的用户 'admin' 来实现远程的维护。

Tips:

1、用 root 登录;(在命令行键入:mysql -u用户名 -p密码)
2、执行如下语句:
   mysql>grant all privilages on *.* to admin@localhost identified by 'password' with grant option;
   mysql>grant all privilages on *.* to admin@"%" identified by 'password' with grant option;

   "%"是通配符,授予 admin 用户可以从任何主机发起访问,password 是为 admin 用户设置的密码。

===============================================

mysql命令行常用命令

mysql命令行常用命令

第一招、mysql服务的启动和停止
net stop mysql
net start mysql

第二招、登陆mysql
语法如下: mysql -u用户名 -p用户密码
键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:
mysql>
注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

第三招、增加新用户
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"
如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
grant select,insert,update,delete on *.* to user1@localhost Identified by "password1";
如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。
如果你不想user1有密码,可以再打一个命令将密码去掉。
grant select,insert,update,delete on mydb.* to user1@localhost identified by "";

第四招: 操作数据库
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。
1、 显示数据库列表。
show databases;
缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。
2、 显示库中的数据表:
use mysql;
show tables;
3、 显示数据表的结构:
describe 表名;
4、 建库与删库:
create database 库名;
drop database 库名;
5、 建表:
use 库名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中记录:
delete from 表名;
7、 显示表中的记录:
select * from 表名;

第五招、导出和导入数据
1. 导出数据:
mysqldump --opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。
2. 导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。
3. 将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;

 第六招、执行外部脚本文件

mysql - u test - p1234 --database BugFree < D:/GreenAMP/BugFree.sql

Tags: mysql