Java⾯试题之:sql优化⽅式
Java⾯试题之:sql优化⽅式
mysql面试题sql语句多表联查⼀、索引查询、避免全表扫描
查询数据库的数据尽量使⽤索引来查询,避免全表扫描。尽量只查询索引条件的字段,
例如:⼀张名为user⽤户数据表的id字段为索引,name字段为⽤户为⾮索引字段,当查询某条数据时,只查询id⽐查询name效率会⾼很多。因为叶⼦节点存储id的值,这样不⽤回表查询,实现了索引覆盖。
⽐如:查询select id from user ⽐select name from user效率⾼。
⼆、查询数据尽量避免使⽤or
从数据库中查询数据,sql语句尽量避免使⽤or来连接条件查询数据。因为使⽤or会导致执⾏sql的时候进⾏数据范围的索引扫描或者全表扫描,效率降低。
例如:select id from user where name=‘a’ or name=‘b’,可以改为以下的形式来提⾼查询的效率:sele
bootstrap免费模板下载ct id from user where name=‘a’ union select id from user where name=‘b’;改了之后,两次查询都是⾛索引,效率相对较⾼。
三、连续查询,能⽤between就⽤
在连续数值的查询中,能使⽤between的情况下,尽量使⽤between,⽽不使⽤in。in和not in可能会导致全表查询。
四、where查询条件,对字段进⾏表达式操作
sql语句的where查询条件,对字段进⾏表达式的操作,会导致mysql引擎放弃使⽤索引⽽进⾏全表扫描。
例如:select * from user where age/2=10(age字段有索引)(整体不⾛索引)。
五、where查询条件,对字段进⾏函数操作
sql语句的where查询条件,对字段进⾏函数操作,也会导致mysql引擎放弃使⽤索引⽽进⾏全表扫描查询。
例如:select name from user where SUBSTR(name,2,3)=‘tom’;
六、多张数据表查询数据,使⽤inner join
多张数据表查询数据,使⽤inner join,left/right join来代替⼦查询。因为⼦查询需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询⼯作。
hlookup和vlookup的区别七、in()和exists()
in()适合B表⽐A表数据⼩的情况,exists()适合B表⽐A表数据⼤的情况;
例如:select * from user a where exists (select name from user b where a.id=20)和select * from user a where id in(select id from user b where b.id=20)。
⼋、使⽤like进⾏数据表查询时,能⽤%就不建议使⽤双%
在使⽤like进⾏数据表的查询时,能⽤单%的情况下,不建议使⽤双%,双%查询会导致mysql引擎放弃使⽤索引⽽进⾏全表扫描查询,查询时尽量把%放后⾯,或者不适⽤%。
九、最左优先
在mysql建⽴联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。左边匹配不到,整个sql不⾛索引。
例如:select * from user where u_one=‘1’ and u_two=‘2’;
⼗、精确类型匹配
从数据库中查询数据的时候,使⽤精确的类型匹配。
例如:select id from user where id=‘3’;如果id 建⽴的varchar类型的⾛索引,如果写成select id from user where id=3不⾛索引。
短视频免费下载素材⼗⼀、表越⼩,查询越快
选取最使⽤的字段属性,⼀般来说,数据库中的表越⼩,执⾏的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中的字段的宽度设得尽可能⼩。另外⼀个提⾼效率的⽅法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执⾏查询的时候,数据库不⽤去⽐较NULL值。
js获取时间年月日时分秒⼗⼆、数据量⼤时,合理使⽤分区表
数据量表较⼤时,合理使⽤分区表。
使⽤partition by ⼦句定义每个分区存放的数据。在执⾏查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询就⽆需扫描所有分区,只需要查包含需要数据的分区就可以了。
⼗三、合理选择存储引擎
合理选择存储引擎。
Innodb:适合数据完整性,并发性控制,擅长更新,删除。
鲏ascii码是什么 myisam:适合⾼速查询及插⼊。擅长插⼊和查询。
⼗四、慢查询⽇志
慢查询⽇志的使⽤,在调试的时候开启慢查询,定位的慢查询语句,再做优化策略。
关闭/开启语句 Slow_query_log=0|1,Long_query_time=N超过该时间临界点,就为慢查询。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论