MySQL基础命令
1.常用查询
查看大小写是否敏感
show variables like '%lower_case_table_names%';
查看缓存相关的设置
show variables like "%query_cache%";
查看第一次执行的SQL
show profile cpu,block io for query 1 ;
查看第二次执行的SQL
show profile cpu,block io for query ;
查看支持的存储引擎
show engines;
查看当前MySQL默认的存储引擎
show variables like "%storage_engine%";
Join
2.常见的Join查询图
|
|
3.索引
索引分类
|
|
索引基本语法
创建 | CREATE [UNIQUE ] INDEX [indexName] ON table_name(column)) |
---|---|
删除 | DROP INDEX [indexName] ON mytable; |
查看 | SHOW INDEX FROM table_name\G |
使用Alter命令 | ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) : 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 |
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。 | |
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。 |
适合创建索引的情况
-
主键自动建立唯一索引
-
频繁作为查询条件的字段应该创建索引
-
查询中与其它表关联的字段,外键关系建立索引
-
单键/组合索引的选择问题, 组合索引性价比更高
-
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
-
查询中统计或者分组字段
总结: 查询中过滤、统计、分组、排序、关联所能用到的字段应该建立索引,
建索引优先考虑复合索引,其次考虑单值索引.
不适合创建索引的情况
-
表记录太少
-
经常增删改的表或者字段
-
Where条件里用不到的字段不创建索引
-
过滤性不好的不适合建索引
3.Explain性能分析
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
Explain+SQL语句
Explain字段解释
id: select 查询的序列号`,表示查询中执行select子句或操作表的顺序。
select_type: 主要用于区别普通查询、联合查询、子查询等的复杂查询。
table: 这个数据是基于哪张表的。
partitions: 查询数据匹配的分区
type: 是查询的访问类型,是较为重要的一个指标
possible_keys: 显示可能应用在这张表中的索引,一个或多个。
key: 实际使用的索引。如果为NULL,则没有使用索引。
key_len: 表示索引中使用的字节数
ref: 显示索引的哪一列被使用了
rows: 显示MySQL认为它执行查询时必须检查的行数,不精确。
filtered: 返回结果的行占需要读到的行(rows列的值)的百分比
Extra: 其他的额外重要的信息。
索引引用情况
Where****语句 | 索引是否被使用 |
---|---|
where a = 3 | Y,使用到a |
where a = 3 and b = 5 | Y,使用到a,b |
where a = 3 and b = 5 and c = 4 | Y,使用到a,b,c |
where b = 3 或者 where b = 3 and c = 4 或者 where c = 4 | N |
where a = 3 and c = 5 | 使用到a, 但是c不可以,b中间断了 |
where a = 3 and b > 4 and c = 5 | 使用到a和b, c不能用在范围之后,b断了 |
where a is null and b is not null | is null 支持索引 但是is not null 不支持,所以 a 可以使用索引,但是 b不可以使用 |
where a <> 3 | 不能使用索引 |
where abs(a) =3 | 不能使用 索引 |
where a = 3 and b like ‘kk%’ and c = 4 | Y,使用到a,b,c |
where a = 3 and b like ‘%kk’ and c = 4 | Y,只用到a |
where a = 3 and b like ‘%kk%’ and c = 4 | Y,只用到a |
where a = 3 and b like ‘k%kk%’ and c = 4 | Y,使用到a,b,c |
口诀
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
LIKE百分写最右,覆盖索引不写*;
不等空值还有OR,索引影响要注意;
4.查询优化
|
|