注:本零散知识点系列所有内容均来自 “程序猿在囧途”系列群 聊天记录
循环累加一个 字段 并用逗号分隔
select shit from( select 要累加的字段, @tt:=CONCAT(@tt,',',a.要累加的字段) as shit from 某表 a,(select @tt:='') b ) c ORDER BY LENGTH(c.shit) desc limit 0,1
问答
用户表 :包含id主键索引,用户名字段和用户密码 还有用户入库时间
问题1、这张表一般加索引的有哪几个字段
问题2、如果这表 有百万数据。那么 我要获取该表的总记录数 ,怎写sql?
问题3、如果我的数据 有几个亿 。那么 怎么利用 各种手段 计算表的记录数
1.user_name
2:select count(*) from table USE INDEX(PRIMARY);
3:思路是必须结合shell script
系统初始化时利用 shell把每个表的记录 保存在缓存里
当程序 对表进行操作时, 利用程序 让该条缓存失效
shell设置成定时任务。 一旦发生某个缓存失效,就重新计算count(*)
并再次插入缓存
大家注意, 我刚才提了两个问题
1、该表常见索引会在哪。 大家都回答是user_name。这是对的
2、如果没有建立user_name索引,那么count(*) 确实不要做任何手脚
3、但是如果你在第一步建立了user_name索引。那么cout(*)的时候 就要加上use index(PRIMARY)
因为 如果 你不加。mysql这傻缺 会默认用你的user_name 作为扫描主键
每一次连接都会慢 所谓的0.0x秒
如果并发高、PV大 数据量大。 服务器就崩溃了
如果你的 user_name字段值很长。 那么必定是比主键慢 (主键因为是数字)
往往很多表的主键 用的不是数字 ,而是 guid 很多位的那种
USE INDEX(PRIMARY) 如何解?
代表 强制使用 主键索引
好。 本题我们 发现几个现象
1、上述功能和PHP或框架有关系吗? :没有
2、做一个系统,到了进阶,哪些知识点是最重要的? :Linux Mysql