SQL学习
文章平均质量分 87
K'illCode
记录自己的学习历程,大部分来自转载,如有侵权联系删除.......
展开
-
SQL优化
复合索引也称为联合索引,当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。如果字段的大小有变化,应用就会受到影响,因为它必须修改字段宽度。默认新增SQL有事务控制,导致每条都需要事务开启和事务提交,而批量处理是一次事务开启和提交,效率提升明显,达到一定量级,效果显著,平时看不出来。列经常被修改,而且每次被修改的数据的长度不同,这会引起“行迁移”现象,而这造成多余的I/O,是数据库设计中要尽力避免的,这种情况下用。原创 2022-10-24 19:42:01 · 613 阅读 · 0 评论 -
数据库优化八招
前言毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信能够快速准备解决咱么日常遇到的80%甚至90%的性能问题。从解决问题的角度出发,我们得先了解到问题的原因;其次我们得有一套思考、判断问题的流程方式,让我们合理的站在哪个层面选择方案;最后从众多的方案里面选择一个适合的方案进行解决问题,找到一个合适的方案的前提是我们自己对各种方案之间的优缺点、场景有足够的原创 2022-05-16 08:14:03 · 2824 阅读 · 0 评论 -
在工作中常用到的SQL
最近在公司做了几张报表,还记得刚开始要做报表的时候都快把SQL给忘光了(当时在广州休假了1个月多,在实习期间也没咋写过SQL),回到公司的第一个需求就是做报表。于是我很不要脸地跟带我的学长说:“SQL我好像忘光了,group 分组查询好像都忘得差不多了,我得复习一下”。这篇文章来记录一下我曾经忘掉的group查询、join查询等一些比较实用/常用的SQL本文主打通俗易...原创 2019-11-07 21:17:34 · 192 阅读 · 0 评论 -
百万级数据,分页如何处理?
最近遇到了这么一个情况,数据库里面的数据由于长期的堆积,导致数据量不断的上升,而后台的系统每次进行分页查询的时候,效率都会降低很多。后来查看了一下之后,发现此时的分页原理主要是采用了传统的物理分页 limit n,m 的方式。为了方便演示,我特意创建了以下几张表进行实例演练:表分别是商品表,用户表,用户选购商品记录表:goods user g_u三张表的关系比较简单,user的id...原创 2019-06-02 12:54:52 · 1158 阅读 · 0 评论 -
8种常见SQL错误用法
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operation WHERE type = 'SQLStats' AND name =...原创 2019-06-23 17:06:44 · 180 阅读 · 0 评论 -
你是一直认为 count(1) 比 count(*) 效率高么?
MySQL count(1) 真的比 count(*) 快么? 反正同事们都是这么说的,我也姑且觉得对吧,那么没有自己研究一下究竟?如果我告诉你他们一样,你信么?有Where条件的count,会根据扫码结果count一下所有的行数,其性能更依赖于你的Where条件,所以文章我们仅针对没有Where的情况进行说明。MyISAM 引擎会把一个表的总行数记录了下来,所以在执行c...转载 2019-06-23 17:19:23 · 147 阅读 · 0 评论 -
MySQL 规范
一、数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的...原创 2019-06-23 17:21:09 · 142 阅读 · 0 评论 -
结合实际项目,谈谈如何进行SQL查询优化
问题背景前段时间,被紧急调到一个新项目,支撑新项目的开发。跌跌撞撞之下,项目也正常上线了,期间收获颇多,无论是业务上的,还是业务之外的。业务上的就不多说了,不具通用性,意义不大,有一点业务之外的东东给我的感触比较深,特记录下来,与大家分享下 :查询优化。查询优化完整示例工程:data-init,包括数据库表的 ddl 和 dml,以及数据批量的生成相关表涉及的表不多,一共三张:...原创 2019-07-22 13:09:51 · 312 阅读 · 0 评论 -
这几个错误的SQL写法,你不会还在用吧?
作者:db匠原文:https://yq.aliyun.com/articles/725011、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operati...转载 2019-08-05 14:43:19 · 92 阅读 · 0 评论 -
详细的 MySQL 规范
一、数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,并且最后不要超过32个字符临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果...原创 2019-08-26 08:56:34 · 113 阅读 · 0 评论 -
后端开发必备的 MySQL 日志文件知识点
前言日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库中常见的日志文件有错误日志,二进制日志,慢查询日志和查询日志。下面分别对他们进行介绍。错误日志错误日志文件对MySQL的启动,运行,关闭过程进行了记录。mysql>showvariableslike'log_error';+---------------+--------------------...原创 2019-10-04 16:44:58 · 921 阅读 · 0 评论 -
分库分表
像我这样的菜鸟,总会有各种疑问,刚开始是对 JDK API 的疑问,对 NIO 的疑问,对 JVM 的疑问,当工作几年后,对服务的可用性,可扩展性也有了新的疑问,什么疑问呢?其实是老生常谈的话题:服务的扩容问题。正常情况下的服务演化之路让我们从最初开始。1、单体应用每个创业公司基本都是从类似 SSM 和 SSH 这种架构起来的,没什么好讲的,基本每个程序员都经历过。2、RPC ...原创 2019-05-03 15:11:47 · 141 阅读 · 0 评论 -
MySQL练习题及答案
附录:建表语句创建图书管理库的图书、读者和借阅三个基本表的表结构:创建BOOK:(图书表)CREATE TABLE BOOK ( BOOK_ID int(10), SORT VARCHAR(10), BOOK_NAME VARCHAR(50), WRITER VARCHAR(10), OUTPUT VARCHAR(50), PRICE int(3));创建READE...原创 2018-09-27 09:27:55 · 8408 阅读 · 1 评论 -
数据库常见的面试题大全
1、触发器的作用? 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2、什么是存储过程?用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只...原创 2018-09-19 16:27:39 · 171 阅读 · 0 评论 -
MySQL 数据库基础知识 1
MySQL数据库数据库基本概念 Database数据库(DB)是存放数据的仓库,只不过这些数据存在一定的关联,并按一定的格式存放在计算机上。从广义上讲,数据不仅包含数字,还包括了文本、图像、音频、视频等数据库管理系统(DBMS)数据库管理系统(Database Management System)是管理数据库的软件系统,它按一定的数据模型组织数据数据定义功能可定义数原创 2017-12-13 08:19:28 · 557 阅读 · 0 评论 -
MySQL基础知识 2
先使用 某个数据库所有的操作都是在此数据库之下.1,show databases;展示所有的数据库;(1,show 和 databsaes都是关键字 命令结束后以分号结尾);表是包含在某一数据库下面的.2,use 数据库名称;3,show tables; 将某一个数据库下面所有的表以列表的形式展示出来.4,drop原创 2017-12-13 08:20:19 · 240 阅读 · 0 评论 -
MySQL基础知识 3
创建部门表CREATE TABLE dept(deptno INT PRIMARY KEY auto_increment,deptname CHAR(10) NOT NULL,loc CHAR(30))创建员工表CREATE TABLE emp(empno INT PRIMARY KEY auto_increment,ename原创 2017-12-13 08:21:02 · 510 阅读 · 0 评论 -
MySQL 基础之了解基本操作和基本数据类型
SQL分类:DDL: 数据定义语言(DataDdefinition Language)这些语句定义了不同的数据段,数据库,表,列,索引等数据库对象的定义.常用的关键字主要包括 create,drop, alter等DQL: 数据查询语言(DataQuery Language)主要用来对数据库中的各种数据对象进行查询。SQL 查询语句的解析顺序: 1、from子句组装来自不原创 2017-12-13 14:20:59 · 479 阅读 · 0 评论 -
SQL 10个技巧
这几天在写索引,想到一些有意思的TIPS,希望大家有收获。一、一些常见的SQL实践(1)负向条件查询不能使用索引select * from order where status!=0 and stauts!=1not in/not exists都不是好习惯可以优化为in查询:转载 2017-12-06 09:15:09 · 444 阅读 · 0 评论 -
SQL性能调优
摘要:针对购物旺季网站流量会对数据库造成的压力,作者给出了MySQL性能调优的一些技巧,这些技巧极具参考价值,通过这些调优,可以有效避免因为流量过大造成服务器宕机,从而给企业造成经济损失。以下是译文:万圣节已经过去很久了,该是把注意力集中在即将到来的假日季节的时候了。首先是感恩节,接着就是黑色星期五和网络星期一,最终在圣诞节/节礼周(从12月26日的节礼日开始,到12月31日的除夕结束为期转载 2017-12-06 14:22:25 · 251 阅读 · 0 评论 -
mysql 手工注入讲解
MySQL手工注入的基本步骤以及一些技巧的记录,当出现学习手工注入的时候,网上的文章参差不齐,导致很长一段时间对手工注入的理解一直处于一知半解的状态,特此记录本文,让小白们少走些弯路。本文只针对手工注入小白,大牛绕过轻喷。步骤注释或者闭合语句首先看下一个基本的SQL语句查询源码:$sql="SELECT * FROM users WHERE id='$id' LIMIT转载 2018-01-23 19:40:25 · 1044 阅读 · 0 评论 -
AngularJs之$http服务前端与后端之间的数据传输
AngularJs中的$http服务实现前端与后端之间的数据传输,与JQuery中的ajax类似,具体代码如下:1、接收后端数据:需要用到的php代码,文件名为1.php:1<?php2 header('Content-type:text/html;charset="utf-8"');3 4 $arry = array(5 array('webname'=>'...转载 2018-02-08 13:58:10 · 941 阅读 · 0 评论 -
数据库性能优化之SQL语句优化(下)
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其...转载 2018-04-01 16:08:12 · 158 阅读 · 0 评论 -
数据库性能优化之SQL语句优化(上)
一、问题的提出在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实...转载 2018-04-01 16:08:52 · 160 阅读 · 0 评论 -
mysql count(1),count(*)问题
ount(*)对行的数目进行计算,包含NULLcount(column)对特定的列的值具有的行数进行计算,不包含NULL值。count()还有一种使用方式,count(1)这个用法和count(*)的结果是一样的。性能问题1.任何情况下SELECT COUNT(*) FROM tablename是最优选择;2.尽量减少SELECT COUNT(*) FROM table转载 2017-12-12 15:08:38 · 416 阅读 · 0 评论