#mysql

MySQL 索引设计概要

Published at April 30, 2019 ·  1 min read

如何正确高效的设计索引,由于 hdd 的特性,随即访问数据是非常耗时的,对于数据库,无论是读取一行还是多行数据,都会将该行或多行所在的页面全部加载进来,然后再读取对应的数据记录。在 mysql 中,页的大小一般为 16 kb,也可能是 8kb,32 kb 或者其他值。数据库等待一个页从磁盘读取到缓存池所需要的成本巨大,需要消耗 10ms 左右的时间,如果顺序读取则会非常快,达到 40MB/s。如果一个页面的大小为 4kb,那么 1s 的时间就可以读取 10000 个页,读取一个页面所花费的平均时间就是 0.1 ms,相比随即读取的 10ms 已经降低了两个数量级,甚至比内存中读取数据还要快。数据库索引设计与优化中,分为宽索引与窄索引,每一个在索引中匹配到的记录行最终都需要执行另外的随即读取从聚集索引中获得剩余的数据,如果结果集非常大,那么就会导致随机读取的次数过多进而影响性能。 MySQL 索引设计概要...


为什么使用 B-Tree(B+Tree)

Published at April 29, 2019 ·  1 min read

由于机械磁盘的特性,磁盘的存取速度比主存慢很多,往往是其的 几百分分之一,因此为了提高效率及减少磁盘 I/O,往往每次读取都会预读,即使读取一个字节,也需要从此往后读取一定长度的数据放入内存,预读的长度一般为页(page)的整数倍。而 B Tree 之所以高效,根据 B-Tree 的定义,可知检索一次最多需要访问 h 个节点,一次检索最多需要 h-1 次 I/O,渐进复杂度为 O(h) = O(logdN)。一般实际应用中,出度 d 是非常大的数字,通常超过 100, 因此 h 非常小(通常不超过3),所以 B-Tree 作为索引结构效率非常高 为什么使用 B-Tree(B+Tree)...


mysql中innodb和myisam对比及索引原理区别-云栖社区-阿里云

Published at April 29, 2019 ·  1 min read

如何选择 mysql 中的索引。 innoDB 支持事物和外键,支持 4 个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括 ACID,如果应用中需要执行大量的 insert 或 update 操作,则应该使用 InnoDB,这样可以提高多用户并发操作的性能,MyISAM 管理非事务表,提供高速存储和检索,以及全文搜索能力。如果应用中需要大量的 select 查询,则选择 MyISAM。InnoDB 使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据。MyISAM 堆组织表 使用的是非聚簇索引、索引和文件分开,随即存储,只能缓存索引。MyISAM 读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM 还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读。InnoDB 读写阻塞与事务隔离级别相关。 mysql中innodb和myisam对比及索引原理区别-云栖社区-阿里云...



为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?

Published at March 20, 2019 ·  1 min read

为何要分库分表,单表适合的上限为 200万 条,单库适合的并发上限是 2000 qps。包括分库分表的方式,range 和 hash。 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?...


如何设计可以动态扩容缩容的分库分表方案?

Published at March 19, 2019 ·  1 min read

每个库正常承载的写入并发量是 1000,那么 32 个库就可以承载32 * 1000 = 32000 的写并发,如果每个库承载 1500 的写并发,32 * 1500 = 48000 的写并发,接近 5万/s 的写入并发,前面再加一个MQ,削峰,每秒写入 MQ 8 万条数据,每秒消费 5 万条数据。有些除非是国内排名非常靠前的这些公司,他们的最核心的系统的数据库,可能会出现几百台数据库的这么一个规模,128个库,256个库,512个库。1024 张表,假设每个表放 500 万数据,在 MySQL 里可以放 50 亿条数据。每秒的 5 万写并发,总共 50 亿条数据,对于国内大部分的互联网公司来说,其实一般来说都够了。谈分库分表的扩容,第一次分库分表,就一次性给他分个够,32 个库,1024 张表,可能对大部分的中小型互联网公司来说,已经可以支撑好几年了。 如何设计可以动态扩容缩容的分库分表方案?...


了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?

Published at March 19, 2019 ·  1 min read

redis 缓存雪崩、缓存穿透、缓存击穿三种问题的解决办法,可通过建立 redis 集群,mysql 没有返回值时缓存为 None,可以将热点数据永不过期或者将数据以一随机时间缓存到另一台 redis 中做备用查询。 了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?...


数据库SQL优化大总结之 百万级数据库优化方案 - 雲霏霏 - 博客园

Published at March 19, 2019 ·  1 min read

sql 百万级数据库的优化,最好不要使用 null,避免全表扫描。where 尽量避免 不等于、大于、小于、对字段进行表达式操作、函数操作等容易导致全表扫描的操作。 数据库SQL优化大总结之 百万级数据库优化方案 - 雲霏霏 - 博客园...


MySQL性能优化的最佳20+条经验 | | 酷 壳 - CoolShell

Published at March 19, 2019 ·  1 min read

mysql 的优化经验,将大表拆成小表,对于常需要联合查询的表合成一个表,包含最近登陆一类的经常更新的数据,最好单独一张表以充分利用 mysql 自身的查询缓存 MySQL性能优化的最佳20+条经验 | | 酷 壳 - CoolShell...


Tags

abcs accept acid activemq affinity algorithm allocation android array async aws b+tree b-tree backoff benchmark best-practices bfs big-o bigquery bind bitcount blog break broker bubble buffer cache cap cert cgroups channel citus class classmethod cluster concurrency config consumer container cookie cors crawler cronjob csrf ctr data-science data-structure database datadog dataflow datascience decorator defer dfs distributed django dns docker double-shipping drf ecosia elastic-search enumerate epoll extra facebook-pixel financial-report flask flutter forward-proxy freelance frp garbage-collector gc gcp generator get gil git golang goroutine graphql ha handbook haproxy hash hash-slot hashring hashtable hpa http http-auth http-proxy http_proxy https index innodb instagram intergration interview ios javascript jinja2 jobboard jwt k8s kafka kibana kqueue label lambda layer4 layer7 lean levels.io linked-list linux list listen loadbalancer logs long-tail lru marketing master matplotlib memory merge metaclass metaprogramming metrics metrics-server microservices mitm model mq myisam mysql namespace nat netflix network-extension nginx nodejs nomad nosql npm oodesign openssl optimization orm pandas parallelism parkinglot patroni permission pg pipeline pixelme post postgresql postresql prefetch_related prerender process proxy proxycommand put pvm python queue rabbitmq rbac react-native rebase redis redis-cluster replication resource rest restfulapi retargeting retry revenue reverse-proxy rocketmq saas scaleable search-engine security select seo serverless service session set shadosocks shadowsocks shard sharding shell shopify sigint signal sigterm slack slave slow-query sniper sns socket socks5 source-code spa sql sqlalchemy sqs ssh ssl ssl-pinning stack startup state stateful stateless staticmethod string struct swift switch syscall system-design systemctl tcp tcp-proxy thread tmpreaper token traefik trustkit tunning type typeform udp variable vc vpn vuejs web web-development where yarn zset 削峰 宽索引 异步 窄索引 解耦 跨域 跳板机


Archives

2019 (137)
0001 (1)