MySQL
学习笔记666
这个作者很懒,什么都没留下…
展开
-
mysql索引必须了解的几个重要问题
1、索引是干什么的?索引用于快速找出在某个列中有一特定值的行。不使用索引,mysql必须从第一条记录开始读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,mysql能快速到达一个位置搜寻到数据文件的中间,没有必要查看所有数据。大多数mysql的索引(primary key、index、unique、fulltext)在B树中存储,只是空间列类型的索引使用R树,并...转载 2018-09-28 17:04:15 · 2547 阅读 · 0 评论 -
商品系统设计(三):商品属性设计之固定属性
今天我们讲一下商品属性我们知道,不同类别的商品属性是不同的。 比如图书和男装 图书:作者、出版社、出版时间、ISBN、开本 男装:工艺(图案或颜色)、风格、材质等所以我们首先要建立一个商品分类属性表prod_class_attrDROP TABLE IF EXISTS `prod_class_attr`;CREATE TABLE `prod_class_attr` ( `id` int(原创 2017-01-05 10:34:14 · 7057 阅读 · 0 评论 -
商品系统设计(二):定时更新商品总点击量
紧接着上节课1、其实我们只要把日期(不含时分秒)的部分保存在数据库中 2、如果同一日期有相同用户点击商品,那么我们对其数值+1 3、否则的话,这张日志表会过于庞大 我们需要修改prod_clicklog表CREATE TABLE `prod_clicklog` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `prod_id` int(原创 2017-01-04 14:50:23 · 1086 阅读 · 0 评论 -
商品系统设计(一):商品主表设计
商品主表设计做一个网站如果涉及到商品有这么几种 固定商品 比如我们只是卖鞋的,那么整个商品的属性基本都是一致的。鞋的颜色、尺寸、款式、品牌、价格等属性。 这时我们涉及到的表往往是“平面的”。简单设计商品主表(我们首先假设我们是B2C的) 包含通用信息 (一)即时更新 id、商品名称、所属分类、入库时间、最后一次修改时间、商品简介 (二)延时更新/日志更新 总点击量、月点击量、总销量、原创 2017-01-04 10:50:41 · 4754 阅读 · 0 评论 -
mysql会话变量
mysql会话变量什么是“会话”? 比如我这里用msyql客户端工具创建了2个查询分析器,就是2个会话。会话变量SET @num=1; #设置一个变量等于1SELECT @num; #查询该变量这时候如果我们:SELECT @num;还是返回上面的结果,因为这个变量已经存在当前会话中了(只要不结束当前会话就一直存在)。 如果在另外一个会话去查询,就不存在了。 因为这个特性,所以我们可以在原创 2017-01-03 16:29:28 · 8333 阅读 · 2 评论 -
首先灌入一万条数据(利用msyql存储过程)
说到msyql引擎,InnoDB和MyISam的区别。 我们暂时只要知道两点: 1.InnoDB支持外键和事物,而MyISam不支持 2.事务性表应该使用InnoDB,频繁读取如select操作很频繁的应该使用MyISam引擎。我们新建了2张表:user_sys和user_sys2,字段都一样,只是一个使用InnoDB引擎,一个使用MyISam引擎。我们使用mysql存储过程的方式,给表填充数原创 2017-01-03 14:55:20 · 1671 阅读 · 0 评论 -
MySQL上线后根据status状态进行适当优化
本文摘自《构建高可用linux服务器第三版》我们可以用如下命令列出MySQL服务器运行的各种状态值:mysql> show global status;我个人喜欢的用法是:show status like '查询值%';1.慢查询有时我们为了定位系统中效率比较低下的Query语句,需要打开慢查询日志,也就是slow query log。mysql> show variables like '%slo原创 2016-10-27 16:24:21 · 1199 阅读 · 0 评论 -
MySQL配置文件的优化
文本来自《构建高可用Linux服务器》第三版。下面我们介绍一些对性能影响较大的参数 以下只列出my.cnf文件中[mysqld]段落中的内容,其他锻炼的内容对mysql的运行性能影响甚微。 [mysqld]组中包括了msyqld服务启动时的参数,它涉及的方面很多,其中有mysql的目录和文件、通信、网络、信息安全、内存管理、优化、查询缓存区,以及mysql日志设置等。port = 3306#m原创 2016-10-27 15:13:48 · 936 阅读 · 0 评论 -
MySQL配置文件my.cnf参数解释
[mysqld]port = 3306#端口serverid = 1#服务id。主从同步时需要用到(主服务器和从服务器这个id不同)socket=/var/lib/mysql/mysql.sockskip-locking#避免MySQL的外部锁定,减少出错几率增强稳定性。(对于单台运行的WEB服务器,建议加上)skip-name-resolve#禁止MySQL对外部连接进行DNS解析,使用转载 2016-10-27 11:36:59 · 526 阅读 · 0 评论 -
show status like "qcache%";
如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况; 如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。解决方案 查看”msyql查询缓存的大小”可以修改该值:修改方法1、mysql> set global转载 2016-10-27 11:33:11 · 1225 阅读 · 0 评论 -
show engine innodb status解读
注:以下内容为根据《高性能mysql第三版》和《mysql技术内幕innodb存储引擎》的innodb status部分的个人理解,如果有错误,还望指正!! innodb存储引擎在show engine innodb status(老版本对应的是show innodb status)输出中,显示除了大量的内部信息,它输出就是一个单独的字符串,没有行和列,内容分为很多小段,每一段对应innodb存储转载 2016-10-26 09:28:58 · 17906 阅读 · 1 评论 -
多列索引实验
回顾:简单介绍多列索引生效规则先建表create table t1( c1 char(1) not null default '', c2 char(1) not null default '', c3 char(1) not null default '', c4 char(1) not null default '', c5 char(1) not nul原创 2016-10-15 20:39:44 · 390 阅读 · 0 评论 -
MySQL索引碎片修复
在长期的数据更改过程中,索引文件和数据文件,都将产生空洞,形成碎片。 我们可以通过一个nop操作(不产生对数据实质性影响的操作),来修改表。 比如: 原本表的引擎为innodbalert table tableName engine innodb或者optimize table 表名也可以修复。注意:修复表的数据以及索引碎片,就会把所有文件文件重新整理一遍,使之对齐。这个过程,如果表的行数比较原创 2016-10-20 19:53:50 · 1584 阅读 · 0 评论 -
MySQL系统配置优化
操作系统配置优化数据库基于操作系统的,目前大多数MySQL都是安装在Linux系统之上,所以对于操作系统的一些参数配置也会影响到MySQL的性能,下面就列出一些常见的系统配置。1.网络方面的配置,要修改/et/sysctl.conf文件#增加tcp支持的队列数net.ipv4.tcp_max_syn_backlog = 65535#减少断开连接时,资源回收net.ipv4.tcp_max_tw原创 2016-10-21 15:55:36 · 549 阅读 · 0 评论 -
多列索引生效规则
btree索引的常见误区 在where条件常用的列上都加上索引 比如:where cat_id=3 and price>100 #查询第3个栏目,100以上的商品 只能用上cat_id或price索引,因为独立的索引同时只能用上1个。多列索引生效规则 多列索引发挥作用,需要满足左前缀要求。以index(a,b,c)为例:语句原创 2016-09-24 13:13:47 · 2386 阅读 · 0 评论 -
mysql列类型选择
我们前面通过show processlist观察了mysql的进程状态,找出有问题的SQL, 并且学习了利用 profiling分析SQL语句。 另外我们还可以开启慢查询,来查看执行很忙的SQL。如果语句等待时间长,就调优服务器参数(如缓冲区,线程数等); 如果语句执行时间长,可能是:表关联多、索引没有优化、语句没有优化现在我们可以来学习具体的优化措施,首选来学习 列类型选择列选择的原则:1.字原创 2016-09-24 12:50:04 · 543 阅读 · 0 评论 -
商品系统设计(四):商品属性设计之自定义属性
前面我们说到了不同分类商品的属性是不同的。 图书:作者、出版社、出版时间、ISBN、开本 比如《Java从入门到精通》分为16开和32开,价格就不同了。修改属性表我们要加个字段attr_forprice,代表该属性是否拆分价格,默认是“否”。如果用户选中此项,则要让用户新增自定义属性。DROP TABLE IF EXISTS `prod_class_attr`;CREATE TABLE `pr原创 2017-01-05 11:49:34 · 6816 阅读 · 0 评论 -
[数据表设计] - 商品模型数据架构图
参考文章:http://www.strbook.com/content-1-52-1.html原创 2017-02-17 14:49:02 · 2230 阅读 · 0 评论 -
mysql利用group_concat()合并多行数据到一行
把查询name字段得到的多行记录进行合并,可以通过程序实现,但也可直接在sql层完成,需要的朋友可以参考下 假设两个表a,b,b中通过字段id与a表关联,a表与b表为一对多的关系。假设b表中存在一字段name,现需要查询a表中的记录,同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只显示a表记录行数,则需要把查询name字段得到的多行记录进行合并,可以转载 2017-02-09 16:06:08 · 2457 阅读 · 2 评论 -
MySQL慢查询基础:优化数据访问
对于低效的查询:1、确认程序是否在检索大量超过需要的数据2、确认mysql服务器层是否在分析大量超过需要的数据行MySQL是否在扫描额外的记录最简单的很亮查询开销的三个指标:响应时间、扫描的行数、返回行数这3个指标会记录到MySQL慢查询日志中,所以检查慢查询日志是找出扫描行数过多的查询的好办法。在explain语句中的type列反应了访问类型:全表扫描、索引扫描、范围扫描、唯...原创 2018-09-22 12:07:23 · 214 阅读 · 0 评论 -
mysql中int(1)中int后面的数字(简单介绍)
你可能知道int(1)这个长度1并不代表允许存储的宽度,但对这个长度也没有真正研究过到底代表什么。下面链接是mysql数据类型的存储和范围:http://www.runoob.com/mysql/mysql-data-types.html我们拿int类型举例:int类型,占用字节数为 4 byte,字节(byte)并非计算机存储的最小单位,还有比字节(byte)更小的单位就是 位(bit...原创 2018-10-05 10:25:20 · 20362 阅读 · 0 评论 -
库存扣多了,到底怎么办
业务复杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为这么几层:调用层,一般是处于端上的浏览器或者App;站点层,一般是拼装html或者json返回的web-server层;服务器,一般是提供RPC调用接口的service层;数据层,提供固化数据存储的db对于库存业务,一般有个库存服务(stock-service)提供库存的查询get stock、扣减reduce st...转载 2018-09-26 20:23:18 · 607 阅读 · 0 评论 -
mycat全局表实战应用简析(下):多节点自增字段的处理
在这一篇我们已经了解了mycat全局表的概念: http://blog.csdn.net/github_26672553/article/details/78125554 我们从终端里连接上mycat,然后创建了news_class数据表。现在我们想要往这个表里插入数据:INSERT INTO news_class (`class_name`) VALUES ('php');呃呃,报错啦: E原创 2017-09-29 12:08:12 · 1594 阅读 · 0 评论 -
mycat中全局表的实战应用简析(上)
<table name="news" primaryKey="id" type="global" dataNode="dataNode1" />name表名称; primaryKey为该表的主键type=”global” 是啥? 有几个特性: 1、和具体物理表一一对应 2、多节点配置时出现 新增、修改操作时,则mycat会对所有节点(dataNode),发送该操作。保证所有节点里面的 全局原创 2017-09-28 16:53:48 · 2053 阅读 · 0 评论 -
mysql中间件Mycat:配置2(读写分离)
前面我们完成了mycat多节点取数据的配置: http://blog.csdn.net/github_26672553/article/details/78110830 多节点在一定程度上起到了 负载均衡的作用。现在我们修改一下schema.xml这个配置文件,看看一个节点下多台mysql服务器如何配置?<?xml version="1.0"?><!DOCTYPE mycat:schema S原创 2017-09-28 10:35:46 · 853 阅读 · 0 评论 -
mysql中间件Mycat:配置1(多节点取数据)
mycat是什么不再介绍。 mycat官网地址: http://www.mycat.io/依赖:jdk 1.7+关于jdk的安装,可以参考: http://blog.csdn.net/github_26672553/article/details/58222614mycat下载地址: https://github.com/MyCATApache/Mycat-download/tree/mas原创 2017-09-27 11:14:10 · 1504 阅读 · 1 评论 -
mysql中常用的锁
表级锁直接锁住整个表,其他事务进不来。读锁:lock table balance read; #读锁select * from `balance`;#unlock TABLES; #解锁我们锁住了balance表,并且没有解锁。 此时此刻,如果有新的mysql会话:可以读取,但不能写:select * from `balance`; #可以读取insert into balance(`use原创 2017-09-11 15:30:02 · 1059 阅读 · 1 评论 -
学习mysql事务
所谓的事务,用白话理解就是: 1、不止要执行一个步骤 2、这些步骤错一步,那么整个过程都返回 3、我在处理事务时,外界不能影响我我们创建一张用户余额表:CREATE TABLE `balance` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(11) unsigned NOT NULL, `money`原创 2017-09-11 11:53:52 · 260 阅读 · 0 评论 -
mysql大数据:分区功能
当我们数据量特别大时这时我们要学到一个词汇叫『拆分』mysql有一个功能叫做 分区: 1、把数据分段划分在多个位置存放,可以是同一块磁盘也可以是不同的机器 2、分区后表面上还是一张表,但数据散列到多个位置了 3、读写时还是表明不变,数据库自动去组织分区的数据分区类型mysql中的分区有:range、list、hash、key四种分区方法我们介绍range方法,就是划分范围,比如我们按照id字段原创 2017-09-27 10:14:47 · 1097 阅读 · 0 评论 -
mysql全文索引:fulltext
fulltext全文索引要使用全文索引,不仅需要把某个字段的索引类型设置为fulltext,还需要修改mysql配置文件:[mysqld]ft_wordlist_charset #表示词典的字符集ft_wordlist_file #词表文件,每行一个词及其词频ft_stopword_file #过滤掉不索引的词表,一行一个ft_min_word_len #加入索引的词的最原创 2017-09-27 09:40:07 · 1028 阅读 · 0 评论 -
Mysql多个LEFT JOIN使用ORDER不能使用索引导致查询过慢的解决方案
MySQL在多个LEFT JOIN的情况下使用ORDER BY排序,就算是其中一个表的主键也仍然使用file sort排序,数据量多的话就相当的慢。优化前语句SELECT * FROM a LEFT JOIN b ON a.id=b.a_id ORDER a.id DESC优化后语句SELECT * FROM a LEFT JOIN b ON a.id=b.a_id JOIN (SELECT id转载 2017-08-18 15:05:15 · 1138 阅读 · 0 评论 -
mysql颠覆实战课程 - redis存储用户表信息
前面我们已经学习了redis中的String数据类型: http://blog.csdn.net/github_26672553/article/details/69680548现在我们将要学到redis的第二种数据类型:hash hash顾名思义,它也是一个key-value键值对。 使用命令: hset 表名 字段key 字段value hset user_main 1 zh原创 2017-04-12 16:53:24 · 5509 阅读 · 1 评论 -
轻松快速入门mysql的小基友redis
redis的安装可以参考这篇文章: http://blog.csdn.net/github_26672553/article/details/695682591、redis.conf是redis的配置文件 一般我们都是把配置文件放到/etc/目录下,方便我们以后维护。#拷贝配置文件cp /你的目录/redis.conf /etc/这样在启动的时候,不必指定配置文件路径了#启动redis服务端原创 2017-04-08 16:51:22 · 622 阅读 · 0 评论 -
OA系统中 流程审批数据库的设计
参考: http://www.cnblogs.com/kingeric/p/6052826.html原创 2017-02-22 10:18:37 · 11670 阅读 · 0 评论 -
观察mysql进程状态
show processlist 分析当前有哪个连接,连接处于什么状态mysql -uroot -padmin888 -e 'show processlist'只取出State的值:mysql -uroot -padmin888 -e 'show processlist\G'|grep State去重并排序:mysql -uroot -padmin888 -e 'show processlist\原创 2016-09-24 12:29:36 · 1437 阅读 · 0 评论 -
观察mysql服务器周期性变化
我们前面已经了解了如何利用awk统计mysql的状态写一个脚本每秒钟去获取mysql服务器的状态 vi tjstatus.sh#!/bin/bashwhile truedomysqladmin -uroot -padmin888 ext|awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf原创 2016-09-24 10:22:07 · 624 阅读 · 0 评论 -
AWK简单入门
根据我们的mysql服务器优化大体思路,现在我们的主要任务是『通过脚本,刷新观察status,是否有周期性故障或波动』mysql> show status #查看mysql状态返回200多行,我们注重看下面几个:Queries #当前已经发生了多少次查询Threads_connected #有几个线程过来连接了Threads_running #有几个线程正在工原创 2016-09-24 09:40:54 · 470 阅读 · 0 评论 -
mysql慢查询日志
1.查看mysql是否开启了慢查询日志mysql>show variables like "%slow%";2.开启mysql慢查询日志:vi /etc/my.cnf保存my.cnf后,重启mysql服务.原创 2016-02-26 21:18:03 · 452 阅读 · 0 评论 -
centos下彻底删除MYSQL和重新安装MYSQL [yum方式]
1.删除Mysqlyum remove mysql mysql-server mysql-libs mysql-server;find / -name mysql 将找到的相关东西delete掉;rpm -qa|grep mysql(查询出来的东东yum remove掉)2.安装Mysqlyum install mysql mysql-server mysql-原创 2016-03-24 13:56:10 · 703 阅读 · 0 评论 -
mysql root密码丢失
原创 2016-02-26 21:19:58 · 369 阅读 · 0 评论