MySQL的几个细节小问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

(本文章里,centos的系统命令用斜杠加粗来表示,以便各位阅读~)

Centos里,Mysql是5.1版本的话,那么需要使用#service mysqld start来启动服务,然后才能进入mysql的界面,而升级成5.5版本之后,命令改成#service mysql start。至于在linux下怎么装mysql,直接看http://lnmp.org/install.html就行,这个是装Nginx的,里面直接就顺带安装了mysql5.5。


还有输入命令就提示“ignoring query to other database”,这个问题就是在 “mysql -u用户名 -p”的时候,没有打那个u。


下面说点有营养的,在MySQL里建立一个表1,起名叫A,只有一个列叫“ID”,里面有三个值,分别是"1""2"和NULL,注意,这里是null,而不是"null",如果是"null",那么输入的其实是0.效果图如下:

wKioL1aWcpOA4T6iAADDEAWNmjs806.png

可见a表里的元素是1 2 3 null,可是count(*)和count(id)得出的结论却不是一样的值,由此可见,count(id) 更加精准,因为他不包括null。


我们继续,如果再建立一个b表,里面有一个列叫b_id,有两个元素,全是1,现在打算“显示a表中里与b表id一样的数”,有两种表达方法,一种是子查询,一种是join查询,一般来说都使用join查询,join语句比较好写,效果如下图。

image.png

第一次用了子查询,返回一个“1”,第二次用了join语句,返回了两个“1”,也就是说出现了一对多的情况,这种情况要在join前加上DISTINCT来取消重复项


假设服务器里有一个较庞大的表,每一次SELECT都会舟车劳顿,于是在EXPLAIN SELECT一下是一个好办法,例子中的表结构如下图:

wKioL1aWeKOTHU3gAABqHWXaWaU430.png而两个EXPLAIN结果却大不一样:

wKioL1aWeL3gFyvlAABQyJswKGU488.png

LIMIT 50,5是从51开始,到55结束,不包含50!

一个只扫描了55行,一个却扫描了953行外加使用了额外步骤,于是可见,优化limit查询,主旨就是尽可能少的扫描数据,所以能用主键就用主键。我这里的例子只是从50行开始,如果是在生产中,表里几万行乃至几十万行的数据,主键的扫描优势非常明显。


还没完,如果我们不怕累,再多打几个字。

SELECT film_id,description,title FROM sakila.film WHERE film_id >55 and film_id <=60 ORDER BY title LIMIT 0,5 \G

看看这个命令的EXPLAIN,扫描数字更喜人~LIMIT 0,5不是1,5;要是1的话,开头是第57。这里要小心!


重点放后面,这个用法主要用于一马平川的主键数据表,中间主键不可以用空挡,意味着这个表里不可以有过DROP记录,不然的话,会出现真的空档。



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1734817


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 数据库
安装MySql8.0一次全归纳
安装MySql8.0一次全归纳
142 0
安装MySql8.0一次全归纳
|
8月前
|
SQL 关系型数据库 MySQL
【MySQL进阶-04】深入理解mysql事务本质(超级详解)
【MySQL进阶-04】深入理解mysql事务本质(超级详解)
89 1
|
9月前
|
SQL Oracle 关系型数据库
【MySQL】何为MySQL,一文告诉你答案
【MySQL】何为MySQL,一文告诉你答案
64 0
|
10月前
|
SQL Oracle 关系型数据库
Mysql- 基础学习
Mysql- 基础学习
106 0
|
关系型数据库 MySQL 数据库连接
Mysql的基础学习(下)
Mysql的基础学习(下)
64 0
|
SQL 关系型数据库 MySQL
Mysql的基础学习(上)
Mysql的基础学习
48 0
|
存储 SQL 缓存
|
存储 SQL 缓存
MySQL 概念
MySQL 是一种关系型数据库。开源免费,并且方便扩展。在 Java 开发中常用于保存和管理数据。默认端口号 3306。 MySQL 数据库主要分为 Server 和存储引擎两部分,现在最常用的存储引擎是 InnoDB。
133 0
|
SQL 存储 关系型数据库
初识MySQL之概念认识篇
初识MySQL之概念认识篇
200 0
初识MySQL之概念认识篇