MySQL的日常使用

呐,作为后台程序猿,必不可少的要与数据库打交道,所以今天记录下平时工作中遇到的一些sql问题。
数据库操作,大家用的最多的应该就是select了,使用select我们要记住一个原则:尽量使每次查询的结果集够小!
比如一个嵌套查询A(1000)B(100)C(10),括号中为每个查询结果的行数,如果我们按ABC来执行,那么显然比按CBA执行耗时更长。
为了执行效率的提高,正常都会给某些关键字段加上索引,但是有些查询是不走索引的,这种情况要尽量使用替代方案。

不走索引替代方案描述
select id from t where num is nullselect id from t where num = 0给字段设置默认值
select id from t where num=10 or name = ‘admin’select id from t where num = 10 union select id from t where name = ‘admin’必须要所有 or 连接的字段都有索引才会走索引
select id from t where num in(1,2,3)select id from t where num between 1 and 3in 条件连续
select num from a where num in(select num from b)select num from a where exists(select 1 from b where num=a.num)避免使用in/not in
select id from t where name like ‘%abc%’select id from t where name like ‘abc%’使用右模糊

除了以上,还有关于查询条件左侧有函数和运算操作的情况,这里针对日期详细说一下:
很多同学根据日期来查询的时候通常会这样写:
select * from tableA where fieldDate>‘20170101’
很显然,这样是能查出结果的,但是这样是不走日期上的索引的,因为数据库会默认把fieldDate转成varchar然后再与’20170101’比较。
还有同学这样写:
select * from tableA where DATE_FORMAT(fieldDate, ‘%Y-%m-%d’) >DATE_FORMAT(20170101, ‘%Y-%m-%d’)
这样也是不对的,我们要避免在字段上加处理函数。
正确的写法应该是这样:
select * from tableA where fieldDate>STR_TO_DATE(20170101, ‘%Y-%m-%d’)

几个sql:
IF函数是一个很常用也很重要的函数,
select if(isnull(query_times), 1, query_times+1) as m1
select if(query_times>0, true, false) as m2
与之相对应的还有case when,适合多种分支的情况。

一个表中根据字段guid有重复记录,怎么把这些记录找出来?
select * from tableB where guid in (select guid from tableB where status=1 group by guid having count(*) > 1)

mysql中,根据某个字段倒序排序,如果存在行数该字段为null,那么这些行数是显示在最后的:
SELECT * FROM app_feedback ORDER BY reply_time DESC
这里写图片描述
当我们在页面展示时,我们既希望保持倒序排序,又希望把有null值的显示在最前面,方便操作人员优先操作这些为null的记录,此时可以这样:
SELECT * FROM app_feedback ORDER BY -reply_time ASC
这里写图片描述

多表合并,union和union all,前者自动去掉重复记录,后者保留。
feedback_user表中存在type字段,type有1和2两种值的可能。
这里写图片描述
现在需要统计出每个feedback_id对应的type等于1和2的记录数:
SELECT feedback_id,SUM(oppo),SUM(supp) from (
SELECT feedback_type,feedback_id,COUNT() as oppo,0 as supp from app_feedback_user where feedback_type=‘2’ GROUP BY feedback_id,feedback_type union
SELECT feedback_type,feedback_id,0 as oppo,COUNT(
) as supp from app_feedback_user where feedback_type=‘1’ GROUP BY feedback_id,feedback_type) as ta
GROUP BY feedback_id
这里写图片描述

问题一:MySQL各个版本之间的关系和特性 MySQL 是一个开源的关系型数据库管理系统,由于其稳定性、性能和易用性等特点,被广泛应用于 Web 应用、企业应用和云计算等领域。MySQL 的各个版本之间的关系和特性如下: 1. MySQL 3.x:是 MySQL 的早期版本,主要用于个人和小型网站的开发和部署,功能比较简单,性能一般。 2. MySQL 4.x:是 MySQL 的一个重要版本,引入了多种存储引擎和事务支持等特性,性能和可靠性都有了较大的提升。 3. MySQL 5.x:是 MySQL 的一个重要版本,引入了多种高级特性,如视图、存储过程、触发器、复制、分区等,功能和性能都有了较大的提升。 4. MySQL 8.x:是 MySQL 的一个最新版本,引入了多种新特性,如全文索引、JSON 数据类型、更好的性能和可扩展性等,是一个功能和性能都非常强大的版本。 问题二:MySQL的安装及增删改查 MySQL 的安装和增删改查操作如下: 1. 安装 MySQL:可以通过官方网站下载 MySQL 的安装包,然后按照安装向导进行安装即可。 2. 启动 MySQL:安装完成后,可以使用命令行或者图形界面工具启动 MySQL 服务,如使用命令行可以执行命令:`mysql.server start`。 3. 创建数据库:可以使用命令 `CREATE DATABASE dbname;` 创建一个新的数据库。 4. 创建表:可以使用命令 `CREATE TABLE tablename (column1 datatype, column2 datatype, ...);` 创建一个新的数据表。 5. 插入数据:可以使用命令 `INSERT INTO tablename (column1, column2, ...) VALUES (value1, value2, ...);` 插入一条新的记录。 6. 更新数据:可以使用命令 `UPDATE tablename SET column1 = value1, column2 = value2, ... WHERE condition;` 更新符合条件的记录。 7. 删除数据:可以使用命令 `DELETE FROM tablename WHERE condition;` 删除符合条件的记录。 问题三:MySQL的存储引擎 MySQL 的存储引擎是指 MySQL 用来管理数据的一套底层软件组件,它决定了 MySQL 如何存储、检索和操作数据。MySQL 的存储引擎包括多种类型,如下: 1. InnoDB:是 MySQL 的默认存储引擎,支持事务和行级锁定,适用于高并发和高可靠性的应用场景。 2. MyISAM:是 MySQL 的另一个常用存储引擎,支持全文索引和表级锁定,适用于大量读操作和少量写操作的应用场景。 3. Memory:是 MySQL 的内存型存储引擎,将数据存储在内存中,支持高速读写操作,但不支持持久化存储。 4. Archive:是 MySQL 的归档型存储引擎,适用于大量数据的归档和压缩存储。 5. NDB:是 MySQL 的分布式存储引擎,支持多台服务器之间的数据共享和高可用性。 问题四:MySQL的优化 MySQL 的性能优化是一个复杂的过程,需要从多个方面进行优化,如下: 1. 硬件优化:优化服务器硬件配置,如加大 CPU、内存和磁盘等硬件资源。 2. 数据库设计优化:优化数据库结构和查询语句,避免冗余数据和复杂查询。 3. 存储引擎优化:选择合适的存储引擎,如 InnoDB 或 MyISAM 等,根据具体应用场景进行优化。 4. 索引优化:根据查询需求创建合适的索引,减少全表扫描和排序等操作。 5. 缓存优化:使用缓存技术,如 Memcached 或 Redis 等,提高数据读取和写入的速度。 问题五:MySQL日常使用及运维,包含备份及故障排查 MySQL日常使用和运维包含以下内容: 1. 监控与维护:定期对 MySQL 进行监控和维护,如检查数据库状态、清理日志和缓存等。 2. 备份与恢复:定期对 MySQL 数据进行备份,并进行测试恢复操作,以确保备份的可用性和正确性。 3. 故障排查与修复:对 MySQL 出现的故障进行排查和修复,如磁盘空间不足、网络故障、数据库崩溃等。 4. 安全管理:对 MySQL 进行安全管理,如设置合适的权限和密码、加密数据传输等,确保数据的安全性。 5. 性能调优:对 MySQL 进行性能调优,如优化查询语句、修改参数配置、调整缓存大小等,提高数据库的性能和可用性。 总之,MySQL日常使用和运维需要进行综合管理和优化,以保证数据库的稳定性、可靠性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值