wordpress 建站容易吗,国际足联世界排名,河北网站优化,装修设计培训机构1、分库分表很明显#xff0c;一个主表(也就是很重要的表#xff0c;例如用户表)无限制的增长势必严重影响性能#xff0c;分库与分表是一个很不错的解决途径#xff0c;也就是性能优化途径#xff0c;现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之…1、分库分表很明显一个主表(也就是很重要的表例如用户表)无限制的增长势必严重影响性能分库与分表是一个很不错的解决途径也就是性能优化途径现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢同事的做法是将其散列到100个表中分别从members0到members99然后根据mid分发记录到这些表中牛逼的代码大概是这样子for($i0;$i 100; $i ){//echo CREATE TABLE db2.members{$i} LIKE db1.members;echo INSERT INTO members{$i} SELECT * FROM members WHERE mid0{$i};}?2、不停机修改mysql表结构同样还是members表前期设计的表结构不尽合理随着数据库不断运行其冗余数据也是增长巨大同事使用了下面的方法来处理先创建一个临时表CREATE TABLE members_tmp LIKE members然后修改members_tmp的表结构为新结构接着使用上面那个for循环来导出数据因为1000万的数据一次性导出是不对的mid是主键一个区间一个区间的导基本是一次导出5万条吧这里略去了接着重命名将新表替换上去RENAME TABLE members TO members_bak,members_tmp TO members;就是这样基本可以做到无损失无需停机更新表结构但实际上RENAME期间表是被锁死的所以选择在线少的时候操作是一个技巧。经过这个操作使得原先8G多的表一下子变成了2G多另外还讲到了mysql中float字段类型的时候出现的诡异现象就是在pma中看到的数字根本不能作为条件来查询3、常用SQL语句优化1. 数据库(表)设计合理我们的表设计要符合3NF 3范式(规范的模式) , 有时我们需要适当的逆范式2. sql语句的优化(索引常用小技巧.)3. 数据的配置(缓存设大)4. 适当硬件配置和操作系统 (读写分离.)数据的3NF1NF :就是具有原子性不可分割.(只要使用的是关系性数据库就自动符合)2NF: 在满足1NF 的基础上我们考虑是否满足2NF: 只要表的记录满足唯一性,也是说,你的同一张表不可能出现完全相同的记录, 一般说我们在 表中设计一个主键即可.3NF: 在满足2NF 的基础上我们考虑是否满足3NF即我们的字段信息可以通过关联的关系派生即可.(通常我们通过外键来处理)逆范式: 为什么需呀逆范式:(相册的功能对应数据库的设计)适当的逆范式.sql语句的优化sql语句有几类ddl (数据定义语言) [create alter drop]dml(数据操作语言)[insert delete upate ]selectdtl(数据事务语句) [commit rollback savepoint]dcl(数据控制语句) [grant revoke]show status命令该命令可以显示你的mysql数据库的当前状态.我们主要关心的是 “com”开头的指令show status like ‘Com%’ show session status like ‘Com%’ //显示当前控制台的情况show global status like ‘Com%’ ; //显示数据库从启动到 查询的次数显示连接数据库次数show status like Connections;这里我们优化的重点是在 慢查询. (在默认情况下是10 ) mysql5.5.19显示查看慢查询的情况show variables like ‘long_query_time’为了教学我们搞一个海量表(mysql存储过程)目的就是看看怎样处理在海量表中查询的速度很快!select * from emp where empno123456;需求如何在一个项目中找到慢查询的select , mysql数据库支持把慢查询语句记录到日志中程序员分析. (但是注意默认情况下不启动.)步骤:1. 要这样启动mysql进入到 mysql安装目录2. 启动 xxbin\mysqld.exe –slow-query-log 这点注意测试 ,比如我们把select * from emp where empno34678 用了1.5秒我现在优化.快速体验: 在emp表的 empno建立索引.alter table emp add primary key(empno);//删除主键索引alter table emp drop primary key然后再查速度变快.l 索引的原理介绍一款非常重要工具explain, 这个分析工具可以对 sql语句进行分析,可以预测你的sql执行的效率.他的基本用法是:explain sql语句\G//根据返回的信息我们可知,该sql语句是否使用索引从多少记录中取出,可以看到排序的方式.l 在什么列上添加索引比较合适① 在经常查询的列上加索引.② 列的数据内容就只有少数几个值,不太适合加索引.③ 内容频繁变化不合适加索引l 索引的种类① 主键索引 (把某列设为主键则就是主键索引)② 唯一索引(unique) (即该列具有唯一性同时又是索引)③ index (普通索引)④ 全文索引(FULLTEXT)select * from article where content like ‘%李连杰%’;hello, i am a boyl 你好我是一个男孩中文 sphinx⑤ 复合索引(多列和在一起)create index myind on 表名 (列1,列2);l 如何创建索引如果创建unique / 普通/fulltext 索引1. create [unique|FULLTEXT] index 索引名 on 表名 (列名...)2. alter table 表名 add index 索引名 (列名...)//如果要添加主键索引alter table 表名 add primary key (列...)删除索引1. drop index 索引名 on 表名2. alter table 表名 drop index index_name;3. alter table 表名 drop primary key显示索引show index(es) from 表名show keys from 表名desc 表名如何查询某表的索引show indexes from 表名l 使用索引的注意事项查询要使用索引最重要的条件是查询条件中需要使用索引。下列几种情况下有可能使用到索引1对于创建的多列索引只要查询条件使用了最左边的列索引一般就会被使用。2对于使用like的查询查询如果是‘a’ 不会使用到索引 aaa%’ 会使用到索引。下列的表将不使用索引1如果条件中有or即使其中有条件带索引也不会使用。2对于多列索引不是使用的第一部分则不会使用索引。3like查询是以%开头4如果列类型是字符串那一定要在条件中将数据使用引号引用起来。否则不使用索引。5如果mysql估计使用全表扫描要比使用索引快则不使用索引。l 如何检测你的索引是否有效结论: Handler_read_key 越大越少Handler_read_rnd_next 越小越好fdiskfindl MyISAM 和 Innodb区别是什么MyISAM 不支持外键, Innodb支持MyISAM 不支持事务,不支持外键.对数据信息的存储处理方式不同.(如果存储引擎是MyISAM的则创建一张表对于三个文件..,如果是Innodb则只有一张文件 *.frm,数据存放到ibdata1)对于 MyISAM 数据库需要定时清理optimize table 表名l 常见的sql优化手法1. 使用order by null 禁用排序比如 select * from dept group by ename order by null2. 在精度要求高的应用中建议使用定点数(decimal)来存储数值以保证结果的准确性3. 如果字段是字符类型的索引用作条件查询时一定要加单引号不然索引无效。4. 主键索引如果没用到再查询for update这种情况会造成表锁定。容易造成卡死。1000000.32 万create table sal(t1 float(10,2));create table sal2(t1 decimal(10,2));问?在php中 ,int 如果是一个有符号数最大值. int- 4*832 2 31 -1l 表的水平划分l 垂直分割表如果你的数据库的存储引擎是MyISAM的则当创建一个表后三个文件. *.frm 记录表结构. *.myd 数据*.myi 这个是索引.mysql5.5.19的版本他的数据库文件默认放在 (看 my.ini文件中的配置.)l 读写分离