V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GroupF
V2EX  ›  数据库

大神们,有没有 mysql 建立数据库的奇门技巧

  •  
  •   GroupF · 2019-12-14 18:06:03 +08:00 · 2641 次点击
    这是一个创建于 1831 天前的主题,其中的信息可能已经有所发展或是发生改变。

    让我一步一个脚印的成长,感觉自己建的数据库特别垃圾,就是感觉自己都很随便,又不知从哪里解决

    13 条回复    2019-12-16 17:52:58 +08:00
    GroupF
        1
    GroupF  
    OP
       2019-12-14 18:06:32 +08:00
    感觉周六你们不会刷 V2
    newtype0092
        2
    newtype0092  
       2019-12-14 18:09:43 +08:00   ❤️ 1
    都写在书里,就是没人看,《高性能 MySQL 》,看个前六七章就可以很靠谱了。
    GroupF
        3
    GroupF  
    OP
       2019-12-14 18:15:13 +08:00
    @newtype0092 这本书看得我晕乎乎的,自己苦看,好多低级错误都要找好久,这么一说我自己还需要一个计划了,我的初衷只是想建表,看来这样是不行的
    RedisMasterNode
        4
    RedisMasterNode  
       2019-12-14 18:16:37 +08:00
    姜承尧《 MySQL 技术内幕:InnoDB 存储引擎》
    感觉比高性能 MySQL 看了有用,一来我是觉得翻译书的翻译流畅度是个问题,所以总是推荐原文书看原文,中文书就看国人自己写的也有很多好的资料;二来实际上很多 MySQL 的技巧都是基于常用的 InnoDB 引擎,所以应该更加深入去了解这个引擎而不是 MySQL
    FaceBug
        5
    FaceBug  
       2019-12-14 18:28:56 +08:00
    正常情况,不应该描述为 [建立数据表] 吗,要不是看你写了个 mysql 我以为你要自己造一个数据库
    newtype0092
        6
    newtype0092  
       2019-12-14 18:29:17 +08:00
    @GroupF 你要是完全的新手的话有个 HeadFirst 系列,特别简单易懂,配很多图示、类比之类的讲解,有 MySQL 也有别的,感觉没有编程基础的人也能看懂。
    huijiewei
        7
    huijiewei  
       2019-12-14 18:38:06 +08:00
    SQL 反模式吃透就好了
    loading
        8
    loading  
       2019-12-14 18:54:44 +08:00
    不需要过度地提前优化
    conn4575
        9
    conn4575  
       2019-12-14 19:04:39 +08:00 via Android
    sql 反模式可以参考,但是不要全信,里面很多东西都不符合目前的主流设计
    luckyrayyy
        10
    luckyrayyy  
       2019-12-14 19:06:38 +08:00   ❤️ 1
    你怎么感觉出来垃圾的....得先说明问题才能解决问题啊。
    要是不知道从哪里下手,把事务、索引、锁、底层存储方式这几部分了解一下,大概哪里设计的有问题自己就清楚了。
    wysnylc
        11
    wysnylc  
       2019-12-14 23:30:15 +08:00   ❤️ 7
    1,不用外键
    2,每个表加入 creat_time update_time,creat_time 和 update_time 默认值填 now(),update_time 勾选按时间戳更新
    3,不使用 join,使用 in 多次查询
    4,初期分表尽量使用时间分表,如果类似于 uid 分表就 20 张表,后期用一致性哈希分表
    5,不使用事务,在分库环境下无法保证性能高的强一致性事务
    6,不使用 for update 的行锁,使用 redis 锁这种在分布是环境下可使用的锁并且加在代码中
    7,不使用存储过程和触发器
    8,where 的条件顺序不影响索引的使用,执行器会优化顺序找到匹配的组合索引
    9,暂时想到这一点,其他的再说吧祝你有个好成绩!
    GroupF
        12
    GroupF  
    OP
       2019-12-16 16:42:41 +08:00
    @luckyrayyy 我建立数据库确实好暴力,好多都不规范,一时爽
    GroupF
        13
    GroupF  
    OP
       2019-12-16 17:52:58 +08:00
    @wysnylc
    第 3 条 ,我不是太理解,因为有个同事特别爱用 in 的子查询,上次一个 sql 都要 300 行,设计到十几个表,看的头皮发麻
    第 6 条 ,我就会一点点 redis,甚至不能说会(安装卸载简单知识 hhh,正式工作 8 个月了)
    第 9 条 ,暂时就这么多,看来还有好多需要学

    对了对了,有时候感觉自己学 sql 都是在项目上学新东西的,(用的 mysql) 比如
    1 字段根据 int 值写死的字段显示文字
    select id,if(role_id =2,"代理商",if(role_id=6,"管理","ceshi")) from qy_admin
    select if(table.id=2,"文字 1","文字 2") from table,其中文字 2 可以再写 if 条件 ,来判断多个写死的 1234 所代表的的值
    2 case when then
    3 行转列函数
    4 find_in_set
    等一些我之前没学过的函数,感觉他基础也陌生,然后看了自己建立的辣鸡库,就有了现在这个文,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:56 · PVG 06:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.