摘要:
Mysql总是通过创建和填充临时表的方式来执行union查询,导致很多优化策略不能在union中采取。 除非确实需要服务器消除重复的行,否则就一定要使用 union all。如果没有 all 关键字,mysql会给临时表加上distinct 选项, 这会导致对整个临时表的数据做唯一性检查。即使有Al 阅读全文
posted @ 2020-01-28 14:08
后山前堂客
阅读(530)
评论(0)
推荐(0)
摘要:
group by with rollup,在group by 之上在进行一次汇总 mysql> select coalesce(staff_id,'汇总'), sum(amount) from payment group by staff_id with rollup; + + + | coales 阅读全文
posted @ 2020-01-28 14:06
后山前堂客
阅读(157)
评论(0)
推荐(0)
摘要:
确保on或USING子句中上的列有索引。在创建索引的时候需要考虑到关联的顺序。当表A和表B用列c关联的时候,如果优化器的关联顺序是B、A,那就不要在B表的c列上创建索引,没有用的索引会带来额外的负担。一般来说,除非有其他理由,否则只需要在关联顺序中的第二表的对应关联列上创建索引即可。 确保group 阅读全文
posted @ 2020-01-28 13:55
后山前堂客
阅读(210)
评论(0)
推荐(0)
摘要:
mysql> explain -> (select first_name,last_name from sakila.actor order by last_name) -> union all -> (select first_name,last_name from sakila.customer 阅读全文
posted @ 2020-01-28 13:10
后山前堂客
阅读(262)
评论(0)
推荐(0)
摘要:
-- 如下两种写法等效,一般,通过 exists 的写法更高效mysql> explain select * from sakila.film where film_id in (select film_id from sakila.film_actor where actor_id = 1); + 阅读全文
posted @ 2020-01-28 13:03
后山前堂客
阅读(413)
评论(0)
推荐(0)
摘要:
mysql使用某个索引进行范围查询,也就无法使用该所有后续字段进行排序了。 1 支持多种过滤条件 2 避免多个范围条件 对于范围条件查询,mysql无法使用范围列后面的其他索引, 但是对于等“多个等只查询”没有这个限制【in (a,b,c,d...) 是等值操作】 3 优化排序 阅读全文
posted @ 2020-01-28 01:31
后山前堂客
阅读(121)
评论(0)
推荐(0)
摘要:
如果创建了索引(A,B),再创建索引(A)就是荣誉索引,因为索引(A)是索引(A,B)的前缀索引,因此索引(A,B)可以当做索引(A)来使用【仅仅针对B Tree索引来讲】 针对InnoDB,ID为主键,索引(A)可当做 (A,ID)来使用,不用再创建索引(A,ID) 表中的索引越多,则insert 阅读全文
posted @ 2020-01-28 01:18
后山前堂客
阅读(234)
评论(0)
推荐(0)
摘要:
mysql有两种方式生成有序结果: 通过排序操作 order by 按照索引顺序扫描(explain 出来的type 为 index) 扫描索引本身是很快的,因为只需要从一条索引记录移动到下一条索引记录即可。但是如果索引不能覆盖查询所需的全部列,那就不得不每扫描一条索引记录就得回表查询一次对应的行。 阅读全文
posted @ 2020-01-28 01:12
后山前堂客
阅读(170)
评论(0)
推荐(0)
摘要:
6 覆盖索引 【可参考博文 https://www.cnblogs.com/kerrycode/p/9909093.html】 如果一个索引包含所有需要查询的字段,则称之为“覆盖索引”。 使用覆盖索引,只需要扫描索引,而无需回表: 一般索引比数据行数少,若只需要读取索引,则mysql访问数据量会减少 阅读全文
posted @ 2020-01-28 00:24
后山前堂客
阅读(168)
评论(0)
推荐(0)

浙公网安备 33010602011771号