让我一步一个脚印的成长,感觉自己建的数据库特别垃圾,就是感觉自己都很随便,又不知从哪里解决
1
GroupF OP 感觉周六你们不会刷 V2
|
2
newtype0092 2019-12-14 18:09:43 +08:00 1
都写在书里,就是没人看,《高性能 MySQL 》,看个前六七章就可以很靠谱了。
|
3
GroupF OP @newtype0092 这本书看得我晕乎乎的,自己苦看,好多低级错误都要找好久,这么一说我自己还需要一个计划了,我的初衷只是想建表,看来这样是不行的
|
4
RedisMasterNode 2019-12-14 18:16:37 +08:00
姜承尧《 MySQL 技术内幕:InnoDB 存储引擎》
感觉比高性能 MySQL 看了有用,一来我是觉得翻译书的翻译流畅度是个问题,所以总是推荐原文书看原文,中文书就看国人自己写的也有很多好的资料;二来实际上很多 MySQL 的技巧都是基于常用的 InnoDB 引擎,所以应该更加深入去了解这个引擎而不是 MySQL |
5
FaceBug 2019-12-14 18:28:56 +08:00
正常情况,不应该描述为 [建立数据表] 吗,要不是看你写了个 mysql 我以为你要自己造一个数据库
|
6
newtype0092 2019-12-14 18:29:17 +08:00
@GroupF 你要是完全的新手的话有个 HeadFirst 系列,特别简单易懂,配很多图示、类比之类的讲解,有 MySQL 也有别的,感觉没有编程基础的人也能看懂。
|
7
huijiewei 2019-12-14 18:38:06 +08:00
SQL 反模式吃透就好了
|
8
loading 2019-12-14 18:54:44 +08:00
不需要过度地提前优化
|
9
conn4575 2019-12-14 19:04:39 +08:00 via Android
sql 反模式可以参考,但是不要全信,里面很多东西都不符合目前的主流设计
|
10
luckyrayyy 2019-12-14 19:06:38 +08:00 1
你怎么感觉出来垃圾的....得先说明问题才能解决问题啊。
要是不知道从哪里下手,把事务、索引、锁、底层存储方式这几部分了解一下,大概哪里设计的有问题自己就清楚了。 |
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,暂时想到这一点,其他的再说吧祝你有个好成绩! |
12
GroupF OP @luckyrayyy 我建立数据库确实好暴力,好多都不规范,一时爽
|
13
GroupF OP @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 等一些我之前没学过的函数,感觉他基础也陌生,然后看了自己建立的辣鸡库,就有了现在这个文,哈哈 |