mysqlcrud语句
MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:MySQL常用语句表(或...
2024.11.151、问题现象描述
昨天上线一个活动,有个排行榜的功能,刚开始打开很流畅,晚上的时候突然打开很慢,排行榜基本是打不开,猜想估计是服务器出了问题
2、登录服务器后使用top命令查看资源占用信息
# toptop - 09:38:39 up 31 days, 16:48, 2 users, load average: 0.46, 0.31, 0.25Tasks: 179 total, 1 running, 178 sleeping, 0 stopped, 0 zombie%Cpu(s): 391.1 us, 0.4 sy, 0.0 ni, 84.1 id, 0.4 wa, 0.0 hi, 0.2 si, 0.0 stKiB Mem : 16267728 total, 2427980 free, 2738212 used, 11101536 buff/cacheKiB Swap: 2097148 total, 2097148 free, 0 used. 13136924 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND28739 mysql 20 0 4111084 875996 10908 S 380.1 5.4 1054:13 mysqld果然mysqld进程占用了大部分cpu,因为是4核所以会超过100%,问题定位到mysql数据库
3、登录mysql查看是否存在查询效率低sql语句
mysql> show processlist;反复使用上述命令,发现有一个sql大量出现在列表中
select a.openid, b.nickname, COUNT(a.openid) AS build_countFROM `build` AS a LEFT JOIN `wxuser` AS b ON a.openid = b.openidWHERE lid = 1GROUP BY a.openid, b.nickname, b.widORDER BY build_count DESC, b.wid ASC使用show columns查看表结构
mysql> show columns from build;mysql> show columns from wxuser;发现问题所在了,wxuser表里openid没有索引,所以马上想到应该增加一个索引
mysql>ALTER TABLE `wxuser` ADD INDEX ind_openid (`openid`)由于已经存在大量数据,该sql执行了近23分钟,索引增加完成之后,cpu瞬间下降到1%左右
4、最后总结
关于优化
对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。增加 tmp_table_size 值。mysql 的配置文件中,tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。在开发过程中对于查询比较复杂的sql建议通过EXPLAIN分析SQL语句,并建立索引mysql添加索引命令
1.PRIMARY KEY(主键索引)mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.UNIQUE(唯一索引)mysql>ALTER TABLE `table_name` ADD UNIQUE (`column` ) 3.INDEX(普通索引)mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )4.FULLTEXT(全文索引)mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column` )5.多列索引mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是唯一且不能为空
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的
MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:MySQL常用语句表(或...
2024.11.15mysql数据库汉字乱码怎么办?如何解决mysql数据导入后出现中文乱码问题?怎么解决?前两天做项目中用到含有中文字段的数据CSV文件,使用workbench导入文件报错:从网上找了很长时间都说是CS...
2024.11.12我们知道,mysql 如果设置了主键或者唯一约束,再插入相同的值会报错。假设表中设置name字段为唯一索引,在存在 name = ‘张三‘ 的情况下,再插入"张三", insert into sc (...
2024.11.14今天登录系统,发现系统报错。判断是数据库出问题了。于是检查MySQL服务是否已启动,发现在“服务”里MySQL是启动的,但奇怪的是进程却没有MySQL。不管是重启mysql服务还是通过DOS启动MyS...
2024.11.07什么是安全模式?mysql安全模式什么意思?在mysql中,如果在update和delete没有加上where条件,数据将会全部修改。不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师...
2024.11.11