数据库-面试准备

数据库引擎:INNODB MyIsam

主从复制

CURD

insert into 表名(,) values(,)
update 表名 set 字段名=更改后的内容 where
select * from 表名 where
delete from 表名 where (删除对应条件的行)

创建索引和删除索引

create index 索引名 on 表名(字段名)
drop index 索引名 on表名

查看执行计划命令 explain

12个字段
table,extra,type,possible_keys,key,select_type
extra:可能会出现的信息
①using index 使用了索引查询
②using where 使用了where字句
③filesort 文件排序 性能极差

type:
system>const>eq_ref>ref>range>index>all
range是使用了范围查询的最优化形式
all表示全表扫描
ref和range是我们能做到的比较优化的位置

possible_keys,key:
可能用到的索引名,使用了的索引名

select_type:给出使用的查询类型,是简单呢还是用了子查询
simple简单单表查询

举例子:

select distinct<select_list> from


join <right_table> on <join_condition>
where <where_condition>
group by having
limit <limit_number>

上述SQL查询执行顺序,按标号:
(6) SELECT (6.5)DISTINCT<select_list>

(1) FROM <left_table>
(2) <join_type> JOIN <right_table>
ON <join_condition>
(3) WHERE <where_condition>
(4) GROUP BY <group_by_list>
(5) HAVING <having_condition>

(7) ORDER BY <order_by_list>
(8) LIMIT <limit_number>

sql优化的几种方式

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

2.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

3.避免频繁创建和删除临时表,以减少系统表资源的消耗。

4.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

5.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,改为union all (不是union)

6.in 和 not in 也要慎用,否则会导致全表扫描
对于连续的数值,能用 between 就不要用 in 了:
not between 1 and 3 代替not in(1,2,3);

7.下面的查询也将导致全表扫描: (%放前面 禁止使用)
select id from t where name like ‘%abc’;

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数或运算操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=‘abc’–name以abc开头的id
应改为:
select id from t where name like ‘abc%’

10.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

11.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

猜你喜欢

转载自blog.csdn.net/BOWWOB/article/details/113780465