php sql级别优化

1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20 Continue reading »php sql级别优化

MySQL server has gone away

今天用phpmyadmin导入数据库数据,由于数据库文件稍大一些足有三四十兆,导入时直接出现内存分配不足的fatal error。不得不用命令行导入恢复数据库:mysql -u user -p pass database<data.sql 结果,出现了奇怪的“MySQL server has gone away”。网上搜索了一下,需要修改一下mysql的配置文件。

针对这种情况的出现的成因有两种:

1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。可以通过修改配置文件添加上

wait_timeout=2880000 interactive_timeout = 2880000 延长执行和交互时间,如果不能直接修改mysql.conf,也可以在执行sql文件中最前面加一句”set interactive_timeout=24*3600″,将执行时间延长。

2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。需要设置一下“通信缓冲区的最大长度”

max_allowed_packet = 100M