前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一周学习小总结,MySQL进阶~

一周学习小总结,MySQL进阶~

作者头像
DataScience
发布2020-07-02 14:44:57
5970
发布2020-07-02 14:44:57
举报
文章被收录于专栏:A2DataA2Data

今天的这篇推文,是对前六天MySQL学习的一个进阶学习和小总结,前两天是端午节,大家过得如何?休息之余,不要忘记坚持学习,加油!

不同岗位对MySQL的技术要求

对于不用的岗位,我们对MySql的技术要求不同。

数据分析岗位,侧重查询和多表关联的复杂查询。对于数据分析来说,主要掌握查询,取数据,不关心性能。

数据库开发,程序员岗,注重设计系统,包括表的设计,增删改查,懂得数据库进行查询的原理,依据统计信息对查询进行性能优化,处理非常大的数据量的的查询,SQL的语言的复杂性较数据分析师的高。

DBA-数据库管理员,连接、配置服务器,保证SQL的服务性能、稳定性,修改慢查询,此外,数据库的集群管理,机房服务器连接的一致性管理也是重点。

Python操作MySQL

主要使用库:Python DB-API

常用模块:

  • MySQLdb :MySQL-Python,底层C语言实现,在Python2版本中使用多
  • mysql-connector : MySqL官方提供,使用不是很友好
  • pymysql:使用Python实现,Python三版本以上使用,主要使用pymysql

基本操作

连接数据库

代码语言:javascript
复制
import pymysql
db = pymysql.connect(host='',port=3306)

获取游标

代码语言:javascript
复制
cs = db.cursor()

Cursor是游标,指针的意思,通过cursor读取mysql中的数据,存放在计算机内存中。然后再用python读取 curosr,Cursor可以看做一个中间载体,摆渡船的作用。

选择数据库

代码语言:javascript
复制
db.select_db('db_name')

执行SQL

代码语言:javascript
复制
sql = 'show databases'
result = cs.execute(sql)
dbs = cs.fetchall()

索引

在前几天的课程中,我们讲过索引,这里再复习一下,如果进行工作面试,对MySql的索引考察会是一块重点。

索引有一下几大特点:

  • 对表中一列或多列的值进行排序
  • 定义一种存储在磁盘上的结构,通过索引的结构可以将数据快速从磁盘中读取到内存中
  • 通过索引可以快速检索到数据
  • 数据库内置的存储引擎来实现检索

索引类型,上周的课程提到过,可以翻回去复习。

对于索引的存储结构,这里有两个重要的概念

  • 非聚簇索引 (Non-clustered Index):索引树的叶子节点不存放数据,但存有储数据的位置信息,数据和索引分离
  • 聚簇索引(Clustered Index):数据存储在索引树的叶子节点上

注意事项

  • 执行查询时,MySQL只能使用一个索引
  • 创建索引,可以提高查询速度,但有数据被添加和删除时,需要更新索引,降低了插入和修改数据的速度。
  • 索引列的数据类型存储大小越小越好,如int类型的索引列查询时优于char字符串类型
  • 尽量避免NULL,可以在创建列的时候限制,避免NULL

InnoDB、MyISAM索引引擎

  • MyISAM引擎:使用B+tree的索引结构,叶子节点存放是一个指针,记录地址,指向数据文件中这一索引所在的行的数据的位置。查询的步骤,根据查询语句的条件,在索引树中检索到叶子节点,根据叶子节点中的地址信息,找到数据文件中索引行的其他列的数据。-类似打开字典,在字典拼音目录中找到这一发音-索引,根据发音所指的页码-地址再去数据库文件-字典正文中提取信息,索引结构与数据存储分离
  • InnoDB引擎:与MyISAM索引和数据分开存放的不同是,InnoDB引擎数据文件本身就是一个索引,按照B+Tree的结构组织存放,叶子节点包含全部数据的信息,即数据存储在索引上。优势是对于按照主键索引有序排列的行,数据存储在索引上,相较于索引和数据存储分离的结构,可以更快速的读取索引所在行的全部数据,不用根据地址再去数据文件中寻找数据,提高查询的速度,但不总是速度会提高,查询速度还与查询语句的内容,数据库的数据量,索引的类型和主键的设置有关。实际中,大部分使用的是InnoDB引擎。此外,InnoDB使用行级锁,支持事务,和外键查询。

图形示意:

MyISAM引擎

主键上带有索引,存放在B+Tree结构中,第三行是叶子节点,存放的是地址信息,根据地址信息指向磁盘中数据库文件中这一索引所在的行,找到行后再返回数据,磁盘进行了多次的I/O,速度较慢, 是非聚簇索引的结构。

InnoDB引擎

对比MyISAM,InnoDB 采用的是聚簇索引结构,在第三行的叶子节点上,数据就直接存放在叶子节点上,首先根据主键索引,找到索引后,可以直接读取索引行的数据,减少了磁盘的I/O,提高了查询速度。

SQL优化

优化的一般原则

一般来说查询性能低下的原因是访问了太多的数据:

  • 是否请求了不需要的数据
  • 使用where子句进行过滤
  • 使用临时表,将需要查询的数据汇总到临时表中
  • 批量处理法,对于需要处理大量数据的语句,批量进行处理

索引的优化

  • 使用自增ID作为主键,业务主键用unique key
  • 一般来说,性别,status,type,类别这类字段,值得分布很窄,不适合单独作为索引字段
  • 索引并不是越多越好,无用的索引要删除
  • 不要使用%xxx%,前后双通配符,这种模糊匹配,会导致全表扫描,降低查询速度

写在最后

对于刚起步学习数据分析的同学们,掌握好查询是首要任务,可以不考虑性能,平时多在网上搜索资料,最好是带有答案讲解的题目,做题练习,这里推荐:

SQL面试50题

https://www.bilibili.com/video/BV1q4411G7Lw?from=search&seid=818452521832640792。

从事大数据,ETL工程师数据开发等岗位,需要了解数据库的内部原理,对慢查询进行优化,建表时为了提高查询的性能,索引的设置非常关键。对业务进行分析时,往往需要新建表,保留原有的数据,建表需要结合实际的业务需求,有兴趣的同学可以参考以下资料加深对数据库知识的学习。

  • MySQL 官方手册:https://dev.mysql.com/doc/refman/8.0/en/
  • 《高性能MySQl》
  • 《高可用MySQL》
  • 《深入理解MySQL核心技术》
  • MySQL的源码
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不同岗位对MySQL的技术要求
  • Python操作MySQL
    • 常用模块:
      • 基本操作
      • 索引
        • 注意事项
          • InnoDB、MyISAM索引引擎
            • 图形示意:
            • SQL优化
              • 优化的一般原则
                • 索引的优化
                • 写在最后
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档