赞
踩
先执行查询数据少的表,再执行查询数据多的表。
避免大量内存占用。
减少查询表列数,避免进行冷数据过滤。
唯一性较好、字段较短、使用频繁的列放在联合索引的最左侧
走索引时一并查询出数据。
避免索引失效。
会存在冗余字段,消耗更多的CPU和网络带宽 会无法使用覆盖索引。
子查询会产生大量的临时表也没有索引。
关联表越多关联缓存越大。
UNION ALL不会进行去重操作,加快查询速度。
一个 SQL 只能使用一个cpu 进行计算,拆分后可由多个cpu并行计算。
避免索引失效。
综合性能:count(非主键列) < count(主键) < count(1) ≈ count()
count()是SQL92定义的标准统计行数的语法,跟数据库无关,count(*)会统计值为 NULL的行,而
count(列名)不会统计此列为 NULL值的行。
(1)select *
(2)>、<、!=、between
(3)前置 % 的like查询。
(4)where字段值类型与数据库不一致,存在自动转换。
(5)or连接不同字段。
(6)or连接同一字段,但存在 >、<、!= 非索引查询。(左右查询均为索引时才有效。)
(7)函数或运算导致索引失效。
(8)IS NULL不走索引,IS NOT NULL走索引(表设计:非必要时,字段不要为NULL,设置默认空字符串或0)
(9)复合索出现范围查询时,后面的索引失效 。
(10)IN会走索引,但是当IN的取值范围较大时会导致索引失效。
当只更新少量数据时,mysql 会使用索引来快速定位数据行,进而提高更新的速度。但是,当对大量数据进行批量更新时,索引的使用就会失效,而采用全表扫描的方式来更新数据。这是因为,mysql 更新数据始终都会去在进行大量数据更新时,需要对每行数据进行存储引擎的读写操作,索引在这种情况下会产生额外的性能开销,进而影响更新的速度。因此,这时候全表扫描的方式更为高效。
总体来说,索引在 mysql 更新操作中的作用是有限的。我们应该根据实际情况来进行索引的使用,避免不必要的开销,提高系统的性能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。