用虚拟机装myql装了半天。。然后有又连不上datagrip,折腾了几个小时才知道原来只能主机ip才能连上虚拟机。。 #索引语法 #创建索引 #create [UNIQUE][FULLTEXT]index index_name on table_name (index_col_name,...); #查看索引 #show index from table_name; #删除索引 #drop index index_name on table_name; #可重复索引 # create index idx_user_name on tb_user(name); #唯一索引 # create unique index idx_phone on tb_user(phone); #联合索引 # create index idx_user_age_sta on tb_user(user,age,status); #删除索引 # drop index idx_email on tb_user; #SQL性能分析 #主要对查询语句进行优化 #SQL执行频率 #show [session|global] status like 'com_______'; #全局查询+模糊匹配查询当前数据库的插入/查询/更新/删除次数 #1.慢查询日志:记录了所有执行时间超过指定参数的所有SQL语句的日志 #默认没有开启,修改/etc/my.cnf #慢查询日志的记录信息在/var/lib/mysql/localhost-slow.log #2.profile详情 #慢查询日志只会记录超过指定时间的语句,但部分情况下有些语句的执行时间超过了其本应消耗的 #show profiles可以显示语句的时间花费 # select @@have_profiling;查看是否支持profile操作 #默认profiling是关闭的,通过set语句在session/global级别开启profiling set profiling = 1; show profiles ; #查看指定语句的各个阶段的耗时情况 # show profile for query id; #查看指定语句的各个阶段的cpu占用情况 # show profile cpu for query id; #3.explain执行计划 #explain或者desc命令获取MySQL如何执行select语句的信息,包括select语句执行过程中表如何连接和链接的顺序 # explain select * from table; #explain各字段含义 #id:select查询的序列号,id相同则执行顺序由上到下,id越大越先被执行; #select_type:表示select的类型,常见取值有simple(简单表,即不使用表连接或子查询)、primary(主查询,即外层的查询)、union(union中的第二个或者后面的查询语句)、subquery(select/where之后包含了子查询)等 #type:表示连接类型,性能由好到差的连接类型为NULL、system、const、eq_ref、ref、range、index、all #查询时不使用任何表能达到null #查询使用主键或唯一索引为const,非唯一索引会出现ref #出现all为全表扫描,index会遍历索引 #possible_key:在这张表上可能用到的索引 #key:实际使用的索引 #key_len:索引中使用的字节数,最大可能长度 #rows:执行查询的行数 #filter:返回结果的行数占需要读取行数的百分比,越大越好 #extra:额外信息 #索引的使用 #对某个col创建索引会明显减少耗时,但是也会相应增加索引的存储 #把col的值创建一个B+树 #索引使用原则 #1.最左前缀法则:如果索引了多列(联合索引),要遵守最左前缀法则,查询从索引的最左列开始,并且不跳过索引中的列 #如果跳过了某一列,跳过后的索引失效(跳过的字段后面的索引失效) #最左一列必须存在,不存在则全部失效进行全局查询 #联合索引的字段只要全部存在就有效,顺序无所谓 #2.范围查询:联合索引中出现范围查询(>,<),范围查询右侧的列索引失效 #但是如果是>=或者<=就可以正常查询 #索引失效情况一: #1.在索引列上进行运算操作,例如提取/相加等 #2.字符串类型未加引号 #3.头部模糊匹配索引失效 '%xx'失效 'xx%'不会失效
MySQL学习记录day7
于 2024-07-10 22:25:35 首次发布