《一》.如何查看mysql 现在提供什么存储引擎:
show engines;
show variables like '%storage_engine%';
在5.5之前,mysql默认是MyISAM 引擎
5.5之后,默认为InnoDB
我使用的是5.1
要特别设置InnoDB为默认引擎,需要在 /etc/my.cnf 文件中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。重启MySQL
现在就是InnoDB存储引擎
查看表的引擎:
两种引擎 性能对比:
阿里巴巴使用的引擎:
《二》SQL
性能下降SQL慢
执行时间长
等待时间长
1.查询语句性能差
2.索引失效
3.关联查询太多join(设计缺陷或不得已的需求)
4.服务器调优及各个参数设置(缓冲、线程数等)
SQL执行加载顺序:
手写:
SELECT DISTINCT
<SELECT_LIST>
FROM
<LEFT_TABLE> <JOIN_TYPE>
JOIN <RIGHT_TABLE> ON <JOIN_CONDITION>
WHERE
<WHERE_CONDITION>
GROUP BY
<GROUP_BY_LIST>
HAVING
<HAVING_CONDITION>
ORDER BY
<ORDEER_BY_CONDITION>
LIMIT <LIMIT_NUMBER>
机度:
FROM <LEFT_TABLE>
ON <JOIN_CONDITION>
<JOIN_TYPE> JOIN <RIGHT_TABLE>
WHERE <WHERE_CONDITION>
GROUP BY <GROUP_BY_LIST>
HAVING <HAVING_CONDITION>
SELECT
DISTINCT <SELECT_LIST>
ORDER BY <ORDER_BY_CONDITION>
LIMIT <LIMIT_NUMBER>
总结:从from开始 最后select
join图:
内连接:
FULL 是oracle的 可以使用union 连接
索引:
索引(Index):是帮助Mysql高效获取数据的数据结构。
索引的本质:索引是数据结构。排好序的快速查找数据结构
B+Tree
索引本身也很大,不可能完全存储在内存中,因此索引往往以文件形式存储在磁盘上
优势:
提高数据检索效率,降低数据库IO成本
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗
劣势:
索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引也是要占空间的
虽然索引大大提高了查询速度,同时却降低更新表的速度,如对表进行INSERT、update和delete。因为更新表时,Mysql不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息
mysql索引分类:
1.单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
2.唯一索引:索引列的值必须唯一,但允许有空值
3.复合索引:即一个索引包含多个列
基本语法:
创建:CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length));
ALTER mytable ADD [UNIQUE] INDEX [indexName] on (columnname(length));
删除:DROP INDEX [indexName] ON mytable;
查看:SHOW INDEX FROM table_name
ALTER命令:
ALTER TABLE tbl_name ADD PRIMARY KEY(column_list); 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list) 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次);
ALTER TABLE tbl_name ADD INDEX index_name(column_list) 添加普通索引,索引值可出现多次
ALTER TABLE tbl_name ADD FULL_TEXT index_name(column_list) 该语句指定了索引为FULLTEXT,用于全文索引。
索引结构与检索原理
BTree索引
哪些情况适合建索引
1.主键自动建立索引
2.频繁作为查询条件的字段应该创建索引
3.查询中与其它表关联的字段,外键关系建立索引
4.频繁更新的字段不适合创建索引
5.where 条件里用不到的字段不创建索引
6.单键/组合索引的选择问题 高并发下倾向创建组合索引
7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
8.查询中统计或者分组字段
哪些情况不适合建索引:
1.表记录太少 300万 官网说是500万-800万
2.经常增删改的表
3.注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的价值
如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000 = 0.99. 一个索引的选择性越接近于1,这个索引的效率就越高。
Hash 索引
full_text全文索引
R-Tree索引