MySQL索引

索引
基数:索引区分度,采样统计
数据页
变更触发索引统计
重新统计索引信息命令:analyze table t

优化器选择索引
扫描行数

explain
强制使用索引 force index(a)
设置慢查询SQL阈值 set long_query_time=0;
全表扫描

前缀索引
字符串字段创建索引

Mysql 查看binlog

解压缩
tar -xzvf binlog-free.tar.gz

mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.02702* 这个命令是查看日志内容的
mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.000001

mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.0273* >prd.sql
mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.0277* >prd.sql
mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.0280* >prd.sql

mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.0293* >prd.sql
mysqlbinlog -vvv –base64-output=decode-rows mysql-bin.0313* >prd.sql

linux 下执行
替换文件名中的.sql为空字符串
rename .sql.rm ‘’ *

windows下添加后缀名
ren * *.sql

Mysql Regexp 正则表达式

1
2
3
4
5
6
-- 查找name字段中以'st'为开头的所有数据
SELECT name FROM person_tbl WHERE name REGEXP '^st';
-- 查找name字段中以'ok'为结尾的所有数据
SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
-- 查找name字段中包含'mar'字符串的所有数据
SELECT name FROM person_tbl WHERE name REGEXP 'mar';

参考:https://www.runoob.com/mysql/mysql-regexp.html

Mysql常用函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 求绝对值
ABS(x)
-- 四舍五入
ROUND(x)
-- 字符数
CHAR_LENGTH(s)
-- 字符串长度
LENGTH(s)
-- 字符串拼接
CONCAT(s1,s2,...)
-- 字符串截取:从字符串s中的第a个字符开始取b个字符
SUBSTRING(s,a,b)
-- 当前日期
CURRENT_DATE()
-- 当前时间
CURRENT_TIME()
-- 当前时间戳
UNIX_TIMESTAMP()
-- 把UNIX时间戳的时间转换为普通格式的时间
FROM_UNIXTIME(d)
-- 如果表达式expr成立,返回结果v1;否则,返回结果v2。
IF(expr,v1,v2)
-- 如果v1的不为空,就显示v1的值;否则就显示v2的值。
IFNULL(v1,v2)
-- 数据库版本号
VERSION()

Mysql相关

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- 求绝对值
ABS(x)
-- 四舍五入
ROUND(x)
-- 字符数
CHAR_LENGTH(s)
-- 字符串长度
LENGTH(s)
-- 字符串拼接
CONCAT(s1,s2,...)
-- 字符串截取:从字符串s中的第a个字符开始取b个字符
SUBSTRING(s,a,b)
-- 当前日期
CURRENT_DATE()
-- 当前时间
CURRENT_TIME()
-- 当前时间戳
UNIX_TIMESTAMP()
-- 把UNIX时间戳的时间转换为普通格式的时间
FROM_UNIXTIME(d)
-- 如果表达式expr成立,返回结果v1;否则,返回结果v2。
IF(expr,v1,v2)
-- 如果v1的不为空,就显示v1的值;否则就显示v2的值。
IFNULL(v1,v2)
-- 数据库版本号
VERSION()

查询隔离级别

1
2
3
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;

正则表达式

1
2
3
4
5
6
-- 查找name字段中以'st'为开头的所有数据
SELECT name FROM person_tbl WHERE name REGEXP '^st';
-- 查找name字段中以'ok'为结尾的所有数据
SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
-- 查找name字段中包含'mar'字符串的所有数据
SELECT name FROM person_tbl WHERE name REGEXP 'mar';

参考:https://www.runoob.com/mysql/mysql-regexp.html

查看数据库表结构

1
2
3
4
5
6
7
8
SELECT
t.TABLE_SCHEMA,
t.TABLE_NAME,
t.TABLE_TYPE,
t.CREATE_TIME,
t.TABLE_COMMENT
FROM
information_schema.`TABLES` t;

mybatis

batch update

批量更新
eg:

1
2
3
4
5
6
update table_post p
inner join (
SELECT u.user_id,u.post_count
FROM table_user u
) as c_u on p.user_id = c_u.user_id
set u.post_count=c_u.post_count;

mapper中batch update写法:

1
2
3
4
5
6
7
8
9
<update id="batchUpdate"  parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
update test
<set>
test=${item.test}+1
</set>
where id = ${item.id}
</foreach>
</update>

TIP:数据库连接必须配置:&allowMultiQueries=true

文档

中文文档
http://www.mybatis.org/mybatis-3/zh/

mybatis-spring
http://www.mybatis.org/spring/zh/

MyBatis Generator
http://www.mybatis.org/generator/
http://generator.sturgeon.mopaas.com/

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×