数据库设计三大范式
一 原子性
二 必须有主键 满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
三 减少数据冗余 看实际需求数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系
SQL优化
Group by 默认分组是有排序的,这样降低效率order by null 禁掉排序
查询条件like以%开头就会放弃索引,可以考虑在字段的固定加同样的字符
例如 like”%234%” like”000%234”
联合索引的时候,服从数据库的最左列原则,为防止索引失效可以在条件前拼接一个联合字段条件例如 where name = name and dec = “test”
如果data目录下发现这三种文件,后辍名分别为-frm,myi,myd一个表同时有3个你上面说的文件,则存储引擎是myisam,其中可以简单理解成这样:
(1)*.frm--表定义,是描述表结构的文件。
(2)*.MYD--"D"数据信息文件,是表的数据文件。
(3)*.MYI--"I"索引信息文件,是表数据文件中任何索引的数据树。
索引创建
1.添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (
`column`
)
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
.索引类型
UNIQUE(唯一索引):不可以出现相同的值,可以有NULL值;
INDEX(普通索引):允许出现相同的索引内容;
PROMARY KEY(主键索引):不允许出现相同的值;
fulltext index(全文索引):可以针对值中的某个单词,但效率确实不敢恭维;
组合索引:实质上是将多个字段建到一个索引里,列值的组合必须唯一;
.删除索引
删除索引可以使用ALTER TABLE或DROP INDEX语句来实现;
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
查看慢查询
show VARIABLES like "long_query_time";
show variables like "log_slow_queries";
设置慢查询
set global log_slow_queries = ON
set global long_query_time = 5
清理mysql自带的查询缓存
SHOW variables like "%query_cache%"
RESET QUERY CACHE;