企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、建立适当的索引 高数据库性能,索引是最物美价廉的东西了,不用加内存,不用改变调用sql,只要执行正确的create index 查询速度就可能提高百倍千倍 ## 二、添加索引 主键索引 当一张表中某个列设为主键的时候,则该列就是主键索引 create table aa(id int unsigned primary key auto_increment, name varchar(32) ) 这是id列是主键例 第一种 : 查询索引 desc 表名 不能显示索引的名字 第二种 : 查询索引的show index from 表名 第三种 : 查询索引的show keys from 表名、 如果你创建不表的时,没有指定主键索引,也可以在创建表后,在添加指令 alter table 表名 add primary key(列名); emp.frm 表的结构 emp.MYD 表的数据 emp.MYI 表的索引 普通索引 普通索引的创建,是先创建表,然后添加索引 create index 索引的名字 on 表名(列) 唯一索引 当变的某列指定为unique约束时,这列就是一个唯一索引 create table ddd( id int primary key not null, name varchar(100) unique ) 全文索引 全文索引、主要是针对文件、文本的检索,全段索引对Myisam 错误的用法 select * from articles where body like '%mysql%' 正确的用法是 select * from articles where match(title,body) aginst('database') 说明 1.在mysql中fulltext索引指针对myisam生效 2.mysql自己提高的fulltest针对英文生效->sphinx(coreseek) 技术处理中文 3.使用方法是match(字段名) against(‘关键字’) 4.全文索引一个叫停止词 删除索引 alter table 表名 drop index 索引名 如果删除主键索引 alter table 表名 drop primary key 修改索引 先删除,在重新创建 为什么创建索引后速度会变快呢 BTree ## 三、 索引使用的注意事项 磁盘占用 对dml(update,delete,insert)语句的效率影响 频繁操作的适合建立索引,字段非频繁不适合建立索引,更新次数多的不适合建立索引 说明,如果我们的表中使用有复合索引(索引作用在多列上),此时我们 注意 1>对于创建得多列索引,只要查询条件使用了最左边的列,索引一段就会 被使用。 explain select * from dept where loc ="xxx" 2>对于使用like查询,查询如果是'%AA' 不会使用到索引‘aaa%’ 会使用到索引 比如: explain select * from dept where dname like '%AAA' 不能使用 索引,既在like查询时,关键字,最前面,不能使用%或则)_这样 的字符,如果一定要前面有变化的值,则考虑使用全文检索->sphinx 3>如果条件中有or 即使用其中有条件带索引也不会使用,换言之,就是 要求使用所字段,都必须建立索引 id : 查询序列号 select_type:查询的类型 table:查询的表名 type:扫描的方式 possible_keys:这个表中可能使用了哪些索引 key 实际使用了哪些索引 key_len: ref rows:扫描了多少行数,可能得到多少记录 extra:sql语句额外信息,排序方式 索引的使用 查看索引的是使用情况 show status like 'Handler_read%'; 大家可以注意 handler_read_key:这个值越高越好,越高表示使用索引查询到的次数 handler_read_rnd_next:这个值越高,说明查询低效 常用SQL优化 大批量插入数据(MySql管理员) 对于MyISAM alter table table_name disable keys loading dataa alter table table_name enable keys; 对于Innodb 对于 1.将到导入的数据按照主键排序 2.set unique_checks= 0,关闭唯一性校验 3. set autocommit = 0,关闭自动提交 sql语句的小技巧 1> 在使用group by 分组查询,默认分组后,还会排序,可能会降低速度 2> 在group by 后面添加order by null 就不会排序 3> 在有些情况下,可以使用连接代替子查询,因为使用join MySql不需要在内存中 创建临临时表 select * from dept,emp where dept.deptno = emp.deptno select * from dept left join emp on dept.deptno = emp.deptno 选择合适的存储引擎 myIsam 存储,如果表对事物要求不高,同时是以查询和添加为主的,我们考虑使用 myisan存储引擎 INNODB 存储,对事物要求高,保存的数据都是重要数据 memory: 存储,比如我们数据变法频繁,不需要入库,同时又频繁查询和修改,我们考试 使用memory myisam innodb 批量插入的速度 高 低 事物安全 支持 全文索引 支持 锁机制 表锁 行锁 存储限制 没有 64TB B数索引 没有 支持 哈希索引 支持 集群索引 支持 数据缓存 支持 支持 索引缓存 支持 数据可压缩 支持 空时使用 低 高 内存使用 低 高 支持外键 MyISaM 与 innodb 1.事物安全 2.查询和添加速度 3.支持全文索引 4.锁机制 5.外键MyISAM不支持外键 MyISaM删除数据文件变小 optimize table 表名 定时维护