面试题:有一张表,用索引优化你是怎么优化的,怎么做?

有一张表,用索引优化你是怎么优化的,怎么做?

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及
 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中使用 中对字段进行 null 值判断和
中对字段进行函数操作和中对字段进行表达式操作和!=或<>操作符
和or 来连接条件和使用in 和 not in 使用like,否则引擎将放弃
使用索引而进行全表扫描。
3.如果在 where 子句中使用参数,也会导致全表扫描。
因为SQL只有在运行时才会解析局部变量,
但优化程序不能将访问计划的选择推迟到运行时;
它必须在编译时进行选择。然 而,如果在编译时建立访问计划,
变量的值还是未知的,因而无法作为索引选择的输入项。
4.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,
否则系统将可能无法正确使用索引。
5.在使用索引字段作为条件时,如果该索引是复合索引,
那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,
否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
6.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,
当索引列有大量数据重复时,SQL查询可能不会去利用索引,
如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引
也对查询效率起不了作用。
7.索引并不是越多越好,索引固然可 以提高相应的 select 的效率,
但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,
所以怎样建索引需要慎重考虑,视具体情况而定。
8.善用 Explain 查看SQL执行计划。
数据库时怎么优化的?  
根据我的经验,首先可以在数据库设计阶段考虑每个字段合适的数据类型
(数据类型优化),合适的数据类型对后续的优化有很大的帮助,
比如unsiged tinyint表示年龄。后续程序运行过程中,
通过慢查询日志获取需要优化的SQL语句,通过执行计划
分析SQL语句的执行过程,结合合适的索引和SQL的语句结构调整,
进行SQL语句的优化,如果数据量太大的情况下,可能单纯的索引已经不太有效果,
这个时候就可以考虑库表层面的优化方式,比如分库分表、读写分离等(例子),
通常来说这样就可以应对千万级别的数据量。当然通过硬件层面也能很好的帮助数据库优化。

你可能感兴趣的:(Jdbc)