mysql+redis+memcached

Wesley13
• 阅读 837

mysql+redis+memcached

数据库

数据库设计

mysql+redis+memcached
 a. 单表 b. FK(单表;一张表存储时,如果有重复出现的字段为了防止硬盘的浪费,所以做一个FK;去掉FK变成单表(这样子访问速度快了)) c. M2M(多对多关系)

到底是什么关系? 单选的下拉框/radio FK;多选下拉框/checkbox M2M

mysql+redis+memcached

举个小例子:

mysql+redis+memcached
问题:员工信息表员工当前薪资;保留员工的所有的调薪记录。 思路一:两张表 员工表: id name salary

        调薪:
            id  price  time  员工ID 

思路二:三张表 员工表: id name salary

         调薪:
            id  price  time 
            
            
        员工调薪表:
            id   uid   sid</span></pre>
mysql+redis+memcached

基本SQL

分组(group by)

select depart\_id,count(1),max(salary),min(age),sum(age) from user group by depart\_id select depart\_id,count(1),max(salary),min(age),sum(age) from user group by depart\_id having count(1)>5

注意事项:

通过聚合条件group by然后进行筛选的用having不能用where

连表

inner join / left join / right join inner join是保留两个共有的,如果一个没有就不保留。 left join 是以左表为主表,如果右表没数据,则为null right join 是以右表为主表,如果左表没数据,则为null

举个小例子:

mysql+redis+memcached
数据: 部门表: id title 1 销售 2 运营 3 IT

        用户表:
            id          name        部门id
            </span>1           x1          1
            2           x2          1
            3           x3          1
            4           x4          1
            5           x5          1</pre>
mysql+redis+memcached
mysql+redis+memcached
 请问查到多少条数据? select \* from userinfo left join depart on userinfo.did = depart.id 5

        select </span>* <span style="color: #0000ff;">from</span> depart left join userinfo on userinfo.did = depart.id    7<span style="color: #000000;">
    
        select </span>* <span style="color: #0000ff;">from</span> userinfo inner join depart on userinfo.did = depart.id   5<span style="color: #000000;">
    
        select </span>* <span style="color: #0000ff;">from</span> depart inner join userinfo on userinfo.did = depart.id   5</pre>
mysql+redis+memcached

MySQL数据库引擎以及区别?

mysql+redis+memcached
a. 常见innodb、mysiam b. 区别: - innodb: - 支持事务(特性:原子性、一致性、隔离性、持久性) 事务就是(要完成都完成,要不完成就回滚) - 表锁 - 行锁 - mysiam - 不支持事务 - 表锁 - 全文索引 - 速度快 
mysql+redis+memcached
mysql+redis+memcached
补充: 原生SQL begin;

            select </span>* <span style="color: #0000ff;">from</span> xxx  <span style="color: #0000ff;">for</span><span style="color: #000000;"> update;
            
            update ...
            
            commit;
        
        django:
                
            with trancation.automic:
                User.objects.filter().select_for_update()</span></pre>
mysql+redis+memcached
应用场景:商品数据计数。

索引

mysql+redis+memcached
作用: - 加速查找 - 约束 种类: - 索引:随便写 - 唯一索引:允许Null + 不重复 - 主键索引:不允许Null + 不重复

    </span>-<span style="color: #000000;"> 联合索引:多列组成一个索引
    </span>- 联合唯一索引:多列组成一个索引 +<span style="color: #000000;"> 唯一
        例如:
            name  email  pwd 
            
     命中索引遵循最左前缀的原则: name、name  email、name pwd、name  email  pw</span></pre>
mysql+redis+memcached
mysql+redis+memcached
补充: - 覆盖索引,当查找数据时候在索引表中就可以获取数据,无需去数据表中查找。 select name from user where name='xxx' - 索引合并, 使用多个单列索引进行查找。 select \* from user where name='xx' email='xx'

为什么索引快?
    因为在索引结构中讲述按照B</span>+来进行存放的数据。</pre>
mysql+redis+memcached

优化数据库方案

mysql+redis+memcached
 a. 索引。 b. 固定长度的字段写在前面。 id name age < id age name c. 对于固定选择的内容:性别,可以将其对应关系保存在内存中。 d. 分表 - 垂直分分,将数据分割到N张表。 - 水平分分,将列分到到N种表。 e. 分库 f. 读写分离(主从复制) 主:读写 从:读

    在django中的应用:
        models.Users.objects.filter(id</span>=2).using(<span style="color: #800000;">'</span><span style="color: #800000;">default</span><span style="color: #800000;">'</span><span style="color: #000000;">)
        models.Users.objects.filter(id</span>=2).using(<span style="color: #800000;">'</span><span style="color: #800000;">db1</span><span style="color: #800000;">'</span><span style="color: #000000;">)
g. limit 
    select </span>* <span style="color: #0000ff;">from</span> tb where name=<span style="color: #800000;">'</span><span style="color: #800000;">alex</span><span style="color: #800000;">'</span> limit 1<span style="color: #000000;">;
    
h. 缓存
    将常用数据读取到redis中(缓存),读取速度快。
    </span></pre>
mysql+redis+memcached

char和varchar的区别。

char是定长,不变的。 varchar是变长,可变的。

视图、触发器、存储过程、函数

视图:视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句。因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。其内容由查询定义。 但是,视图并不在数据库中以存储的数据值集形式存在,行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。简单的来说视图是由其定义结果组成的表; 触发器:触发器,是一个表数据的变更后通过触发器来修改与之相关联的其他表的数据,保证数据的一致性。使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询
存储过程是存储在数据库目录中的一坨的声明性SQL语句。 Java,Python,PHP等应用程序可以调用存储过程。
mysql自定义函数就是实现程序员需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

 

    </div>
    <div class="postDesc">posted @ <span id="post-date">2018-11-21 20:10</span> <a href="https://www.cnblogs.com/hnlmy/">hnlmy</a> 阅读(<span id="post_view_count">2</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=9997515" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(9997515);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=419389,cb_entryId=9997515,cb_blogApp=currentBlogApp,cb_blogUserGuid='9dd4be1f-fb20-4ca9-9d43-08d5866282ce',cb_entryCreatedDate='2018/11/21 20:10:00';loadViewCount(cb_entryId);var cb_postType=1;</script>
注册用户登录后才能发表评论,请 登录注册访问网站首页。
mysql+redis+memcached
</div><!--end: forFlow -->
</div>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java反射, 不看你可别后悔
<divid"content\_views"class"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,
Stella981 Stella981
3年前
AndroidStudio封装SDK的那些事
<divclass"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,2.55,5z"id"raphael
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
Java8中的LocalDateTime工具类
<divid"content\_views"class"markdown\_views"<!flowchart箭头图标勿删<svgxmlns"http://www.w3.org/2000/svg"style"display:none;"<pathstrokelinecap"round"d"M5,00,
Stella981 Stella981
3年前
33.Docker安装Mysql及用户配置
<divclass"forFlow"<divid"post_detail"<!done<divid"topics"<divclass"post"<h1class"postTitle"<aid"cb\_post\_title\_url"class"postTitle2"
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这