
MySQL
源大郎
这个作者很懒,什么都没留下…
展开
-
《高性能MySQL》第6章查询性能优化(4)
优化特定类型的查询优化SQL_CALC_FOUND_ROWS前文提到使用这个提示符可以获取限制前的行数,但是它会扫描符合条件的所有行。这个可用来做一个是分页时,后续还有多少页的功能,不过更好的方式是只显示个下一页,如果有数据显示到下一页的数据,如果没有提示到达了末尾。优化UNIONMySQL通过创建并填充临时表的方式来执行UNION,因此很多优化无法在UNION查询中很好应用。所以需要手动将WHERE、LIMIT、ORDER BY等语句下推到UNION子查询中。如果不是需要对结果去重,请使用UNI原创 2020-06-29 02:55:40 · 132 阅读 · 0 评论 -
《高性能MySQL》第6章查询性能优化(3)查询优化器的提示,优化汇总(上)
查询优化器的提示如果对于执行计划不是很满意,可以使用优化器提供的几个提示来控制最终执行计划。以下为常见的提示:HIGH_PRIORITY和LOW_PRIORITY: 类似于线程优先级,LOW_PRIORITY可能让该语句一直处于等待状态(可作用于全局,可用HIGH_PRIORITY取消),查询优先顺序:HIGH_PRIORITY>无设置>LOW_PRIORITY 其他顺序:无设置>LOW_PRIORITY 。仅对表锁有效,不过可能会引起MyIASM并发插入被禁用导致失效DELA原创 2020-06-28 03:58:37 · 363 阅读 · 0 评论 -
《高性能MySQL》第六章查询性能优化(2)MySQL查询优化器的局限性
MySQL查询优化器的局限性关联子查询5.5及之前,MySQL中子查询实现得非常糟糕。最糟糕的一类是WHERE条件中包含IN的子查询。它的执行过程并不是如预想的那样是先执行IN中子查询,再根据IN的优化来寻找,而是将外查询压到子查询中。可以使用 JOIN语句来重写子查询不过本机是5.7,好像没有这么问题了?EXPLAIN SELECT SQL_NO_CACHE * FROM sakila.film WHERE film_id IN(SELECT film_id FROM sakila.film_a原创 2020-06-27 03:18:05 · 143 阅读 · 0 评论 -
《高性能MySQL》查询性能优化(上),慢查询的原因,重构查询的方式,查询的流程。
为什么会慢原创 2020-06-26 03:11:20 · 255 阅读 · 0 评论 -
《高性能MySQL》第五章创建高性能索引
索引的优点除了快速查找,索引还有一些其他附带功能。比如BTree索引,由于它具有顺序性,所以可以使用ORDER BY进行排序和GROUP BY进行分组。索引大大减少了服务器需要扫描的数据量索引可以帮助服务器避免排序和临时表索引可以将随机I/O变为顺序I/O对于中大型的表索引都是比较好用的,但是对于小型表或者特大型表就不尽然,小型表可能全表扫描的整体效率会高于使用索引,因为维护索引本身也是需要成本的。特大型的表,维护成本也必然很大,这种可采用分区的技术。高性能的索引策略有一个索引建立的评原创 2020-06-14 01:46:43 · 215 阅读 · 0 评论 -
《高性能MySQL》第五章创建高性能索引——索引的类型
好的加快检索速度,坏的索引再数据量较大时使性能急剧下降(与磁盘的读写有关)。索引类型索引实在存储引擎层实现的,所以没有统一的索引标准,依据不同的存储引擎的索引的工作方式并不一样。BTree索引一般默认的便是这个索引。底层实现是基于BTree实现的(大多是B+Tree),它的优势在于它本身是多路查找树,查找的速度会很快,劣势是插入时由于需要维护树,所以会多消耗一些时间。MyISAM是非聚簇索引,就是索引里没有之间存储数据,而是通过数据的物理位置引用被索引的行。(注意24下的索引值错了,该为0X56原创 2020-06-13 03:03:08 · 175 阅读 · 0 评论 -
《高性能MySQL》第四章Schema与数据结构优化——数据类型部分
选择优化的数据结构选择某个字段的类型时,有几个原则可以尝试遵守1.更小通常更好,因为它们占有更小的磁盘、内存和CPU缓存,且处理时所需的时间周期比较少2.尽量选择结构简单的数据结构,比如整型就比字符简单,字符有编码格式和排序规则。3.尽量避免NULL,尤其对于需要建索引的列,可为NULL的列,会使得索引、索引统计和值比较都更复杂。只有在大量稀疏数据且使用INNODB的场景下,使用该列为null才会带来一定的空间效率。如非必须,大多数情况,都不要置某列可为NULL。整数类型TINYINT(8bit原创 2020-06-10 07:18:00 · 169 阅读 · 0 评论 -
《高性能MySQL》第三章服务器性能剖析
性能优化简介用响应时间来衡量性能优劣。性能优化就是指在一定的负载下尽可能的降低相应时间。优化的第一步是测量。优化有两个方面:1.执行时间,去除子任务,降低子任务频率,提升子任务效率等 2.等待时间,比如锁竞争等通过性能剖析进行优化性能剖析一般有两个方面:1.测量任务所需时间2.对结果进行统计和排序,重要的靠前。使用explan 语句可看是否走了索引,使用SHOW PROFILES可看执行该语句前所有语句的执行时间排名,使用show profile cpu,block io for QUER原创 2020-06-08 06:26:14 · 200 阅读 · 0 评论 -
MySQL建表时遇到的坑[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause...
我写了一个建表语句如下所示:CREATE TABLE IF NOT EXISTS `user`( id int NOT NULL auto_increment PRIMARY KEY , `name` VARCHAR(64) NOT NULL DEFAULT '', gender int NOT NULL DEFAULT '0' COMMENT '0男性,1女性', telphone VARCHAR(13) NOT NULL DEFAULT '', register_mode VARCHAR(原创 2020-06-07 06:13:18 · 529 阅读 · 1 评论 -
《高性能MySQL》第一章MySQL架构与历史(概括性描述)
MySQL逻辑架构第一层:连接处理,授权认证,安全等第二层:核心服务所在层,查询解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在此层实现。第三层:存储引擎,负责数据的存储与提取,它是可根据应用场景自行选择的,甚至可以自己实现。并发控制支持读写锁。锁的颗粒可分为表锁与行锁。表锁: 锁的开销小,但是并发度低,读写锁,写锁的优先级高于读锁,所以写锁有可能会插入读锁队列,进而阻塞后面的读锁。行锁: 锁的开销大,但是并发度高。事务四个特性事务是的四个特性:ACID:A:原原创 2020-06-01 04:00:06 · 148 阅读 · 0 评论