作者文章归档:wangxiuwen

InnoDB 内部结构


InnoDB 存储结构

一个表空间包括了一个或多个段,一个段包括了一个或多个区,一个区包括了多个页,而一个页中可以有多行记录

区(Extent)是比页大一级的存储结构,在InnoDB存储引擎中,一个区会分配64个连续的页。因为InnoDB中的页大小默认是16KB,所以一个区的大小是64*16KB=1MB。

段(Segment) 由一个或多个区组成,区在文件系统是一个连续分配的空间(在InnoDB中是连续的64个页),不过在段中不要求区与区之间是相邻的。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表、索引的时候,就会相应创建对应的段,比如创建一张表时会创建一个

Read more

kaggle titanic 数据分析


下载

kaggle competitions download -c titanic
unzip ./titanic.zip -d ./titanic
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('./titanic/train.csv')

df_temp = df[['Embarked', 'Survived']]

# 生成数据透视表
## 方法1
table = pd.pivot_table(df_temp, index=['Emba

Read more

MySQL 调优


调优流程

查看版本

SELECT VERSION();

查询缓存

show variables like '%query_cache%';

profiling

select @@profiling;
set profiling=1;
show profiles;
show profile; -- 查看上一个查询
show profile for query 2;

逻辑查询优化

逻辑查询优化就是通过改变SQL语句的内容让SQL执行效率更高效,采用的方式是对SQL语句进行等价变换,对查询进行重写。重写查询的数学基础就是关系代数。
SQL的查询重写包括了 子查询优化等价谓词

Read more

MySQL COUNT


COUNT

COUNT(*) = COUNT(1) > COUNT(字段)

尽量使用COUNT(*),当然如果你要统计的是就是某个字段的非空数据行数,那另当别论。
尽量在数据表上建立二级索引,系统会自动采用key_len小的二级索引进行扫描。

Read more

MySQL SELECT 查询


WHERE 条件过滤

比较运算符

含义 运算符
等于 =
不等于 <>或 !=
小于 <
小于等于(不大于) <= 或 !>
大于 >
大于等于(不小于) >= 或 !<
不小于 !<
在指定的两个数值之间 BETWEEN
为空值 IS NULL

逻辑运算符

含义 运算符
并且 AND
或者 OR
在指定范围内 IN
非(否定) NOT

通配符

含义 运算符
匹配任意字符串出现任意次数 %
匹配单个字符 -

eg1:

SELECT nam

Read more

MySQL DDL


DDL

下面列举了常见的 DDL 建表、修改表结构的语句

CREATE DATABASE IF NOT EXISTS nba;

USE nba;

DROP TABLE IF EXISTS player;
CREATE TABLE player (
 `player_id` INT(11) NOT NULL AUTO_INCREMENT,
 `team_id` INT(11) NOT NULL,
 `player_name` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
 `height` fl

Read more

MySQL 函数


SQL 函数

算术处理、字符串处理、日期处理、数据类型转换

算术处理

SELECT ABS(-2);
SELECT MOD(101,3);
SELECT ROUND(37.25,1);

字符串处理

SELECT CONCAT('abc', 123);
SELECT LENGTH('你好');
SELECT CHAR_LENGTH('你好');
SELECT LOWER('ABC');
SELECT UPPER('abc');
SELECT REPLACE('fabcd', 'abc'

Read more