Posts Tagged ‘mysql’

MySQL转SQLite Shell脚本

杭城焰火满天飞, 闲来无事, 给 WordPress 换上SQLite; SQLite 在单服务器10W并发以下是很有优势的, 据说可以达到mysql与postgresql的2~20倍(道听途说, 没验证)。 使用WP插件pdo for wordpress, 本来使用XML导入导出数据, 奈何文件太大, 超过php的内存限制,找了个MySQL转SQLite的教本, 很好用, 分享。
文件: mysql2sqlite.sh

编译一个适合自己的MySQL – MySQL邯郸学步

为什么需要编译MySQL ? 性能! 那么不费话 开始:

###以 MySQL 5.1.42 为例
#tar xvf mysql-5.1.42.tar.gz
#cd mysql-5.1.42/
#./configure –prefix=/usr/local/mysql51 ### 只定安装目录
–with-embedded-server –enable-assembler –with-mysqld-ldflags=-all-static –with-client-ldflags=-all-static ### 静态编译
–without-debug –without-docs –without-man –without-readline ### 舍去不必要的东东
–with-charset=utf8 –with-collation=utf8_general_ci ### 指定编码,建议使用utf8, 默认latin1
–with-extra-charsets=complex ### 添加支持的编码, 根据自己的需求指定
–enable-thread-safe-client ### 线程安全
–enable-local-infile –with-ssl –with-libwrap [...]

迁移 Innodb 共享表空间至独立表空间 – MySQL邯郸学步

关于 MySQL 中的 Innodb 引擎就不多说了, 毕竟除了MyISAM 之外, 它的应用最广泛. Innodb 存储数据有两种方式: 共享表空间 和 独立表空间. 顾名思义, 共享表空间 就是把所有数据库数据放在一个或多个文件中( 这种方式的话,使用裸设备倒是很方便); 独立表空间 就是采用和MyISAM 想同的方式, 每个表拥有一个独立的数据文件( .idb )。
在服务器资源有限,单表数据不是特别多的情况下, 独立表空间明显比共享方式效率更高. 但是MySQL 默认是共享表空间, 现在LD 来演示一下转换方法.

处理三角关系MySQL数据库的备份和数据迁移

遇到这么一个情况: 数据库A 依赖数据库B, B依赖数据库C, C又依赖A. 我称之为 三角关系. 最终要完成数据结构的升级. 其实这个case中, 一共牵涉到12个数据库,为了说明清楚, 只以数据库 A B C 为例.
完成升级,包括:

保留原数据;

替换所有存储过程, 函数, 触发器, 视图;

升成必要数据, 插入配置数据;

MERGE例子中的union搜索优化

在 MERGE存储引擎的简单测试 – MySQL邯郸学步 一文中,有一个Union SELECT, 极其消耗时间, 仔细分析会发现,使用的搜索条件对应字段是TIMESTAMP, 索引几乎没用. 那么我们能不能绕开时间字段,使用作为主键的自增字段object_id 呢? 就单纯示例上这种情况,是可以的. 请看下面的存储过程:

MERGE存储引擎的简单测试 – MySQL邯郸学步

大多数时候,LD都看似很闲,所以看书也无目的性。最近看关于MySQL的东西,碰到MERGE这个存储引擎,做个小测试。
我其实只想知道一样东西,用UNION就可以合并两个查询,视图也能合并两张表数据,那么MERGE在合并表的数据后是否提供优化?
LD使用的MySQL是ArchLinux软件库中的,版本5.1.39, 配置文件默认,不做任何内存参数优化(因为使用的数据是真实的,而实际服务器上,运维也使用默认设置);
这两个表2个月前因为表字段的不同,执行一个union all的select语句要 260s 之久; 经过一番优化,已经缩短为2~3s, 但随着数据的增长,执行时间也在增加。LD一直在找解决方案,这么少的数据,还没达到100W,如果不能从SQL优化角度着手,只能从Linux系统和MySQL服务的配置想办法了。 废话不多说,Let’s Go。

多条件排序- MySQL邯郸学步

通常在写SQL语句时会碰到需要对结果集进行排序,使用’order by’单个条件还行,那么多个条件怎么写? 比如:先对时间逆序,再按编号排正序。要求第二次排序不打乱对时间的排序。
1 SELECT id,name,created,action FROM tbl_jobs ORDER BY created DESC, id LIMIT 15;
如上例,直接在’order by’接第二、第三条件即可,很方便。(很久之前LD还考虑过子查询,昏.)

使用Python连接MySQL – MySQL邯郸学步

使用Python并不能直接连接MySQL, 必须安装mysql-python软件包。对于Arch, 只需要 sudo pacman -Sy mysql-python

存储过程中的简单事务处理 – MySQL邯郸学步

很多资料中,对于事务的处理都很简单,抓捕SQL错误,仅仅是一个 @@error_count 吗? 肯定不是。@@error_count 只记录上一次SQL操作的结果,对于存储过程中多条语句肯定是不行的。
那么,怎么才能保证在存储过程中正确的回滚呢?让我们先来看个例子:

查询语句Tips – MySQL邯郸学步

收集了上个星期在SQL开发中自己、同事、网友所碰到的4个Tips。各位看官请多加注意!
1. DISTINCT 查询不重复字段
查询不重复字段,也可以使用 group by;如果还要查询计数, count(DISTINCT id) 也是一个不错的方法;把 DISTINCT 放入子查询可以减少查询次数,注意因地制宜哦!