sql优化

sq:mysql:存储过程

一个人想着一个人 提交于 2020-01-16 19:59:12
存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集, 经编译后存储在数据库中 ,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。 当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。 数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。 存储过程的优点: (1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).减少网络流量

利用Mysql进行Python的数据分析

徘徊边缘 提交于 2020-01-16 19:59:01
一、mysql数据库的思想,以及操作流程 (1)、数据库是一种关系型数据库----‘关系’如何体现呢? 在Java语言或者其他计算机语言作为后台开发来讲,数据库的‘关系’体现在one to one many to one many to many(有中间表产生) one to many (2)、在python数据分析,人工智能技术领域不是以上理解,是将数据通过numpy pandas matplotlib 进行数据的分析 体现在数据的发布思想!将数据发布给客户,人工智能设备----作为数据集! 二、MySQL数据库的实战 (1)、只能满足小型企业级的开发,对于数据集不是很合适!数据储存量较大!数据比较安全! (2)、Oracle—针对于大数据/人工智能利用很多! (3)、数据库分为DDL DCL DML语句 DDL:数据库定义语言,用于定义数据的结构 DCL:数据库控制语言,用于定义数据用户的权限—DBA DML:数据库操作语言,用于检索或者修改数据(主要的,面试,笔试都会考到) 三、Mysql企业级的按照流程 已经企业版本的选择 (1):MySQL分为客户端和服务器端 —备注:MySQL自身会携带基于DOS的客户端和服务器端! (2):安装注意事项 i:用户名和密码的设置 root root ii:端口 默认端口3306 Oracle:5521 iii:编码格式 默认是英文

SQL总结(七)查询实战

为君一笑 提交于 2020-01-16 15:01:32
SQL总结(七)查询实战 一、场景 给定一个场景,学生选课系统为例,大家很熟悉。 主要关系: 学生(学号、姓名、年龄、性别) 教师(教师ID,教师姓名) 课程(课程ID,课程名称,任教教师ID) 成绩(学生ID,课程ID,成绩) 二、创建表并预置数据 创建关系表: --学生:Student(SID,SName,SAge,SSex) --学生表(学号、姓名、年龄、性别) --性别,0表示男,1表示女 -- --IF EXISTS(SELECT OBJECT_ID('Student')) /*此处永远为true,原因是OBJECT_ID返回具体ID,或者NULL*/ --使用下列语句,如果没有,什么都不返回,也就不存在 IF EXISTS(SELECT id FROM sysobjects WHERE name='Student') DROP Table Student Create table Student ( SID nvarchar(20) primary key not null, SName nvarchar(20), SAge int, SSex bit ) --教师:Teacher(TID,TName) --教师表(教师ID,教师姓名) IF EXISTS(SELECT id FROM sysobjects WHERE name='Teacher') Drop

Mysql 之 参数优化了解

谁说我不能喝 提交于 2020-01-16 14:44:08
一、优化的配置文件 [client] port=3306 socket=/tmp/mysql.sock [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. user = mysql basedir = /app/mysql datadir = /app/mysql/data port=3307 server-id = 1 socket=/tmp/mysql.sock #允许创建函数 log_bin_trust_function_creators = 1 character

12 个Mysql查询技巧!

一世执手 提交于 2020-01-16 13:33:04
应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。 那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系。 程序中嵌入的一行行的SQL语句,如果使用了一些优化小技巧,定能达到事半功倍的效果。 技巧一:比较运算符能用“=”就不用“<>” “=”增加了索引的使用几率。 技巧二:明知只有一条查询结果,那请使用“LIMT 1” ”LIMT 1“可以避免全表扫描,找到对应结果就不会再继续扫描了。 技巧三:为列选择合适的数据类型 能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,磁盘和内存消耗的越小越好。 技巧四:将大的DELETE UPDATE OR INSERT 查询变成多个小查询 技巧五:使用UNION ALL 代替UNION,如果结果集允许重复的话。 因为UNION ALL不去重,效率高于UNION。 技巧六:为获取相同结果集的多次执行,请保持sql语句前后一致。 为了充分利用查询缓存。 * 技巧七:尽量避免使用“SELECT ” 其不能有效利用索引,增大了数据库服务器的负担,以及它与应用程序客户端之间网络IO开销。 技巧八:WHERE子句里面的列尽量被索引 索引太多也会降低性能。 技巧九:JOIN子句里面的列尽量被索引 技巧十:ORDER

SQL的性能问题

纵饮孤独 提交于 2020-01-16 12:48:41
  a.分析SQL的执行计划  explain,可以模拟SQL优化器执行SQL语句   b.MySQL的查询优化会干扰我们的优化      查询优化计划:       explain +SQL语句;     explain select * from shine;      id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra      id :编号      select_type :查询类型      table :表      type :类型      possible_keys :预测用到的索引      key :实际上用到的索引      key_len :实际上使用索引的长度      ref :表之间的引用      rows :通过索引查询到的数据量      Extra:额外的信息 来源: https://www.cnblogs.com/starshine-zhp/p/12200592.html

MySQL中的分区表

痴心易碎 提交于 2020-01-16 10:13:26
对用户来说,分区表是一个独立的逻辑表,但是底层是由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成存储引擎的接口调用。分区表在很多场景中可以起到非常大的作用,但是其本身也存在一些限制。以下对MySQL中的分区表作一个简单的归纳。 01 分区表的原理 1、MySQL在创建时使用PARTITION BY子句定义每个分区存放的数据。 2、分区的一个主要目的是将数据按照一个较粗的粒度分在不同的表中。 3、分区表的数据更容易维护。 4、分区表的数据可以分布在不同的物理设备上。 5、一个表最多只能有1024个分区。 6、分区表达式必须是整数,或者是返回整数的表达式。 7、如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来。 8、分区表中无法使用外键约束。 9、分区表由多个相关的底层表实现。 10、分区表的索引只是在各个底层表上各自加上一个完全相同的索引。 11、从存储引擎的角度来看,底层表和一个普通表没有任何不同。 12、分区表的每个操作都会“先打开并锁定所有的底层表”。 13、如果存储引擎能够自己实现行级锁,例如InnoDB,则会在分区层释放对应表锁。 02 分区表的类型 分区表的类型主要有以下几种: (1)根据范围进行分区。每个分区存储落在某个范围的分区,表达式可以是列,也可以是包含列的表达式。 (2

数据库MySQL-设计原则

霸气de小男生 提交于 2020-01-16 10:02:44
二、MYSQL数据库设计原则 1、核心原则 不在数据库做运算; cpu计算务必移至业务层; 控制列数量(字段少而精,字段数建议在20以内); 平衡范式与冗余(效率优先;往往牺牲范式) 拒绝3B(拒绝大sql语句:big sql、拒绝大事务:big transaction、拒绝大批量:big batch); 2、字段类原则 用好数值类型(用合适的字段类型节约空间); 字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能); 避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效); 少用text类型(尽量使用varchar代替text字段); 3、索引类原则 合理使用索引(改善查询,减慢更新,索引一定不是越多越好); 字符字段必须建前缀索引; 不在索引做列运算; innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)(理解Innodb的索引保存结构就知道了); 不用外键(由程序保证约束); 4、sql类原则 sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库); 简单的事务; 避免使用trig/func(触发器、函数不用客户端程序取而代之); 不用select *(消耗cpu,io,内存,带宽,这种程序不具有扩展性); OR改写为IN

Go 每日一库之 go-ini

杀马特。学长 韩版系。学妹 提交于 2020-01-16 07:46:18
简介 ini 是 Windows 上常用的配置文件格式。MySQL 的 Windows 版就是使用 ini 格式存储配置的。 go-ini 是 Go 语言中用于操作 ini 文件的第三方库。 本文介绍 go-ini 库的使用。 快速使用 go-ini 是第三方库,使用前需要安装: $ go get gopkg.in/ini.v1 也可以使用 GitHub 上的仓库: $ go get github.com/go-ini/ini 首先,创建一个 my.ini 配置文件: app_name = awesome web # possible values: DEBUG, INFO, WARNING, ERROR, FATAL log_level = DEBUG [mysql] ip = 127.0.0.1 port = 3306 user = dj password = 123456 database = awesome [redis] ip = 127.0.0.1 port = 6381 使用 go-ini 库读取: package main import ( "fmt" "log" "gopkg.in/ini.v1" ) func main() { cfg, err := ini.Load("my.ini") if err != nil { log.Fatal("Fail to

SQL语句的优化

依然范特西╮ 提交于 2020-01-16 06:57:47
怎么加快查询速度,优化查询效率,主要原则就是应尽量避免全表扫描,应该考虑在where及order by 涉及的列上建立索引。   建立索引不是建的越多越好,原则是:   第一:一个表的索引不是越多越好,也没有一个具体的数字,根据以往的经验, 一个表的索引最多不能超过6个, 因为索引越多,对update和insert操作也会有性能的影响,涉及到索引的新建和重建操作。   第二:建立索引的方法论为: 多数查询经常使用的列; 很少进行修改操作的列; 索引需要建立在数据差异化大的列上   利用以上的基础我们讨论一下如何优化sql.   1、sql语句模型结构优化指导     a. ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];       这个SQL语句优化比较简单,在[sort]这个栏位上建立索引即可。     b. WHERE + ORDER BY + LIMIT组合的索引优化       如果一个SQL语句形如:SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort]