MySQL密码设置和开机启动
在linux下查看安装目录 ps -ef|grep mysql
mysql -u root -p
自启动服务
chkconfig mysql on
chkconfig --list | grep mysql
ntsysv 查看是否有[*] mysql,如果存在表示开机自动启动mysql
安装位置
windows在data目录下
linux
/var/lib/mysql mysql数据库文件的存放路径
/usr/share/mysql 配置文件目录
/usr/bin 相关命令目录
/etc/init.d/mysql 启停相关脚本
修改配置文件位置
以5.5版本为例 cp /usr/share/mysql/my-huge.cnf /etc/my.cnf
以5.6版本为例 cp /usr/share/mysql/my-default.cnf /etc/my.cnf
修改字符集和数据存储路径
show variables like '&char%'
默认服务端和服务端都是latin1,可能会存在乱码问题
default-character-set=utf8 客户端
character_set_server=utf8 服务端
character_set_client=utf8
collation-server=utf8_general_ci
default-character-set=utf8 [mysql]
mysql配置文件
--二进制日志文件log-bin 主从复制
--错误日志文件log-error 默认关闭
--查询日志log 默认关闭,记录查询的日志,开启会降低mysql的整体性能
--数据文件 /var/lib/mysql
--frm文件 存放表结构
--myd文件 存放表数据
--myi文件 存放表索引
mysql逻辑结构介绍
连接层->服务层->引擎层->存储层
存储引擎
show engines
MyISAM和InnoDB引擎对比
SQL性能下降的原因
-查询语句写的不好
-索引失效
-关联查询太多join
-服务器调优以及各个参数的设置
SQL 语句的书写顺序如下:
SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
SQL 语句的执行顺序如下:
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
七种SQL
索引
排好序的高效获取数据的数据结构
性能分析
MySql Query Optimizer查询优化器
常见瓶颈:CPU/IO/服务器硬件
Explain:执行计划,模拟优化器查询SQL语句的执行计划
-explain select * from employee;explain+sql语句
-表的读取顺序/数据读取操作的操作类型/哪些索引可以使用/哪些索引实际被使用/表之间的引用/每张表有多少行被优化器查询
-[id][select_type][table][type][possible_keys][key][key_len][ref][rows][extra]
--id:select查询表的读取顺序,id相同,顺序从上到下,id不同,id越大,表示的表越先执行
--select_type:读取数据的操作类型simple/primary/subquery/derived/union/union result
--table:查询表
--type:访问类型 system>const>eq_ref>ref>range>index>all
---system 表只有一行记录,标量
---const 通过一次查询就查到了,主键索引或者唯一索引
---eq_ref 唯一性索引扫描,表中只有一个记录与之匹配
---ref 非为唯一性索引扫描,返回匹配单独值的行
---range 检索范围内的行 between and 比全表扫描要好
---index 全表扫描,只遍历索引树
--possible——keys:可能使用的索引
--key:实际使用的索引
--key_len:最大可能比对长度
--ref:显示索引的哪一列或者常量被使用了
--rows:大概读取的行数
--extra:不在其他显示的信息,但很重要的额外信息
---using filesort 外部排序,无法利用索引进行排序
---using index 使用了覆盖索引
---using temporary 新建了一个临时表
---using where 使用where过滤
索引优化
尽量使小表驱动大表,减少内层循环(in与exist之间的转换)。
全值匹配最快,最佳左前缀发作。
不在索引列上做任何操作。
范围查询完成之后索引失效。
尽量使用覆盖所有,减少select*。
!=和<>会导致全表扫描。
is null和is not null也无法使用索引。
%加在右边(如何在生产环境使用&字符%?使用覆盖索引)。
字符串不加单引号索引会失效。
用or也会导致索引失效。
group必排序,会有临时表的产生
慢查询日志
具体指运行时间超过long_query_time值的SQL语句,如果不是调优不建议开始慢查询。
修改配置文件my.cnf启用慢查询。
一般使用mysqldumpslow工具配合查询慢SQL。
Show Profile
查看数据库资源消耗情况。
show profile cpu,block io for query [id]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?