1.为什么优化?优化可以提高在使用SQL时的效率
一、查询SQL尽量不要使用select *,而是具体字段
理由:
字段多时,大表能达到100多个字段甚至达200多个字段
只取需要的字段,节省资源、减少网络开销
select * 进行查询时,很可能不会用到索引,就会造成全表扫描
二、避免在where子句中使用or来连接条件
# 分开两条sql写
SELECT * FROM student WHERE id=1
SELECT * FROM student WHERE salary=30000
理由:
使用or可能会使索引失效,从而全表扫描
对于or没有索引的salary这种情况,假设它走了id的索引,但是走到salary查询条件时,它还得全表扫描。
也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定。
虽然mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引还是可能失效的
三、使用varchar代替char
理由:
varchar变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间
char按声明大小存储,不足补空格
其次对于查询来说,在一个相对较小的字段内搜索,效率更高
char和varchar有什么区别?
1、char为定长字符串,char(n),n最大为255
2、varchar为变长字符串,varchar(n),n最大长度为65535
char(10)和varchar(10)存储abc,那它们有什么差别呢?
char保存10个字符,abc三个,其它会用空格补齐;而varchar只用abc三个位置。
3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
4.中文乱码如何解决
如果在dos命令下执行insert插入中文数据,数据又乱码,那现在sqlYog客户端执行下面命令:
set names gbk;
Mysql数据库默认字符集是lantin1,网页中遇到的ISO8859-1,它是英文字符集
我们创建库时,可以指定字符集:create database yhdb charset utf8;
5.drop、delete和truncate之间的区别?
drop删除库或者表,数据和结构定义
delete和truncate只删除表的数据
detete 可以指定where条件,truncate删除所有记录