如果你觉得对你有用,请留下一个赞再走,谢谢!!
文章目录
一、SQL语句查询模板
在实际开发中,读远远大于写,所以数据查询的模板格式必须掌握
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]...
FROM <表名或者视图名>[,<表名或者视图名>...]|(<SELECT语句>[AS]<别名>
[where<表达式>]
[GROUP BY<列名1>[HAVING<表达式>]
[ORDER BY<列名2>[ASC|DESC]]
LIMIT;
开发中常用sql语句:
- 随意获取一条数据(抽奖)
SELECT * FROM table_name ORDER BY RAND() LIMIT 1;
- 批量删除数据(管理端一键删除)
# 加个limit避免大量事务等待而删除失败,提高效率(批量更新也一样)
DELETE FROM table_name LIMIT num1
- 添加索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
- 一般的增删改查自行百度
- 持续更新中……
二、查看性能的语句
2.1 查看是否用上索引(必须会)
- 看
sql
语句是否用上索引,用explain
关键字
explain select * from test
分析:
type:
常用的类型有:ALL、index、range、 ref、eq_ref、const、system、NULL
ALL:
全表扫描index:
遍历索引树range:
只检索给定范围的行,使用一个索引来选择行ref:
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值- 性能上: ref > range > index > ALL
2.2 慢查询哪里看
-
查看当前数据库是否开启了慢查询日志功能
show variables like '%slow%'
分析:
a.slow_query_log
中ON
代表已开启慢查询日志
b.slow_query_log_file
代表日志的位置 -
查看多少秒算慢查询
show variables like 'long_query_time'
分析:
a. 默认是10秒,这里为了测试设置成这样 -
如何开启慢查询(配置文件在哪??,了解即可)
a. 登录mysql
客户端,输入如下命令
select @@basedir;
这是MySQL
安装位置
b. 输入select datadir;
MySQL
的配置文件就存放在此处
c.my.ini
中修改配置参数
-
通过慢查询的日志,定位
sql
说明: 这条语句被定位到的原因是上面将慢查询时间改的很短很短。
2.3 连接数、索引sql
- 查看连接数
show status like 'connections'
- 查看表索引
show index from table_name
(table_name用你自己的表名)
三、事务隔离性
3.1 事务的隔离性:
- 读未提交
read uncommitted;
- 读与提交
read committed;
- 可重复读(mysql默认的)
repeatable read;
隔离性可用如下语句相应修改:
# 读未提交
set session transaction isolation level read uncommitted;
# 读已提交
set session transaction isolation level read committed;
# 可重复读
set session transaction isolation level repeatable read;
3.2 数据不一致性包括:
- 丢失修改
- 不可重复读
- 读‘脏’数据
3.3 锁:
悲观锁 | 乐观锁 | |
---|---|---|
理解 | 在数据库层面上做并发控制 | 应用系统层面上做并发控制 |
分类 | 读锁、排它锁(写锁) | x |
语法 | 写锁:for update , 读锁:lock in share mode ; | 一般在数据库字段中添加版本号进行比对 |
实现者 | MYSQL数据库本身 | 开发者自己 |
使用场景 | 数据量大,多写操作时 | 数据量小,多读操作时 |
四、优化SQL(千万级数据测试)
- 索引失效的情况,在项目应用中能有替换方案就用替换方案
not exist, !=,not in ,
不会使用索引where
中用like
进行%xx%
或者%xx
模糊匹配where
条件中有or
,即使条件有索引,也用不上select * ……
全表扫描,按需取出相应的列
真实数据操作:
先为name加上索引
alter table test add index indx_name('name')
1. 用
union
代替in 、or
select name from test where name in('逆风','猪猪');
# 换成
select name from test where name = '逆风' union select name from test where name = '猪猪';
其它的自行可以去尝试……
五、MYSQL经典50题(含答案)
光说不练歪把子
如果你能把这50道经典题都自行完成了,那公司里的sql业务难不到你的了。
还等什么!!撸起袖子开干吧!!!!
如何获取资源:
- 戳我->资源链接
- 关注公众号回复sql经典50题
六、分享交流
最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!
(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))
-
Java web从入门到精通电子书
-
Python机器学习电子书
-
Python400集(北京尚学堂)
-
JavaScript项目案例、经典面试题
-
Java300集(入门、精通)
-
Java后端培训机构录集(同事培训内部提供)
-
java重要知识pdf文档(价值连城呀呀,不收藏你会后悔的)

喜欢就关注吧,点个赞吧