失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引

SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引

时间:2020-06-08 23:24:48

相关推荐

SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引

如何提高sql的查询效率

在正确的字段上创建索引。优化查询sql的写法(特别是where语句的写法)。

一、数据库的哪些字段适合添加索引

表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。ps:mysql 在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时,mysql 自动创建主索引(primary index),且索引名称为Primary;数据库用户创建唯一性索引时,MySQL自动创建唯一性索引(unique index),默认情况下,索引名为唯一性索引的字段名。占用存储空间少的字段更适合选作索引的关键字。例如,与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。存储空间固定的字段更适合选作索引的关键字。与text类型的字段相比,char类型的字段较为适合选作索引关键字。where子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。更新频繁的字段不适合创建索引,不会出现在where子句中的字段不应该创建索引。

补充:

当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。索引并不是越多越好,索引固然可 以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

二、优化查询sql的写法

1、在sql查询中,使用where关键字尽量避免以下的方式,否则会导致引擎放弃使用索引而进行全表扫描的操作

在 where 子句中对字段进行 null 值判断。ps:如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0在 where 子句中使用!=或<>操作符。在 where 子句中使用or来连接条件。ps:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20使用in 和 not in 关键字,尽量用between 去代替。ps:如:select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3使用like关键字,select id from t where name like ‘%陈%’。ps:可以考虑全文检索在 where 子句中使用参数。ps:因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:select id from t where num=@num可以改为强制查询使用索引:select id from t with(index(索引名)) where num=@num在 where 子句中对字段进行表达式操作。ps:select id from t where num/2=100应改为:select id from t where num=100*2在where子句中对字段进行函数操作。ps:select id from t where substring(name,1,3)=’abc’ ,name以abc开头的id应改为:select id from t where name like ‘abc%’。在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算。

(待补充……)

如果觉得《SQL查询优化方法 提高SQL查询效率 数据库的哪些字段适合添加索引》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。