开启慢查询日志
1.关闭mysql服务:net stop mysql
2.以慢查询记录日志方式启动数据库:在mysql安装目录的bin目录下面cmd进入命令窗口,输入 mysqld.exe --safe-mode --slow-query-log 此时在c盘的programdata里面的mysql-》mysql server x.x -》data 里面将出现一个以.log结尾的文件
3.设置慢查询时间:set global long_query_time = 0.5 ,设置慢查询时间为0.5秒
4. 进行一次慢查询: select ........
5.查看日志:打开刚刚生成的日志文件
如何分析慢查询?主要看什么参数?
使用 explain加上慢查询的sql语句进行分析,那么查询语句为:
explain select ......from........................
得到的信息的注释见下图:
主要看的参数为:
上面的type为all表示 全表扫描,效率低下
possible_keys
key
rows
什么是3NF设计表?
列具有原子性
表中数据具有唯一标识,通过主键实现
表与表之间通过外键关联
myisam与innodb的区别?
MyISAM:默认表类型,它不是事务安全的,而且不支持外键,如果执行大量的select,MyISAM比较适合。
InnoDB:支持事务安全的引擎,支持外键、行锁、事务。如果有大量的update和insert,使用InnoDB。
数据库索引的概念是什么?原理是怎样的?
索引在数据库管理系统中是一个排序形式的数据结构,以协助快速查询和更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
原理是将每一条数据进行连续标号的标记,以二叉树的形式进行排序,提高查询效率
索引的创建原则有哪些?
1.对于查询频率高的字段创建索引
2.对排序、分组、联合查询频率高的字段创建索引
3.索引的数目不宜太多
4.若在实际中,需要将多个列设置索引时,可以采用多列索引
索引的分类有哪些?
-
普通索引:仅加速查询
-
唯一索引:加速查询 + 列值唯一(可以有null)
-
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
-
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
-
全文索引:对文本的内容进行分词,进行搜索
复合索引的使用原则?
对于 复合索引(多列索引),如果不是使用的第一部分(第一列)就不会使用 索引
在where 条件后面使用or或者模糊查询前置匹配(%在前面)都会导致索引失效
水平分表的原则是什么样的?
当一张表中的数据过多时在查询时将会是低效率的,此时需要将这个张表按一定数量数据平均分成张表,从而达到提高查询效率的效果。
ddl、dml优化
https://blog.csdn.net/qq_42764468/article/details/97677796
dql 中有哪些写法会导致索引失效?
1.在where后面 添加or、模糊查询前置匹配、使用!=或<> 会导致
2.使用in和not in 会导致
3.不要使用全表扫描、不要使用select * 中的*
sql语句的执行顺序
from、where、group by 、 having 、select 、 order by 、limit
分页偏移量大的时候如何优化?
使用到索引的字段进行表的扫描