SQL语句长度限制MYSQL配置 下载本文

同步的相关参数即可,网上的相关配置文件很多,大同小异,常用的设置大多修改这些差不多就够用了。

以下是我的一个mysql配置文件,仅供参考:

############################################### [mysqld]

skip-name-resolve server-id = 1

bind-address = 0.0.0.0 port = 3306

datadir = /home/mysql tmpdir = /tmp

default_storage_engine = innodb character_set_server = utf8 innodb_file_per_table = 1 innodb_log_file_size = 512m innodb_log_files_in_group = 4 innodb_rollback_on_timeout = 1 slow_query_log = 1

slow_query_log_file =/var/log/mysql/mysql-slow.log long_query_time = 1

#log-queries-not-using-indexes#这个参数不安全,说是记录没有用到索引的语句,其实记录的全部的日志,占用大量的io,建议不要打开

#relay_log_recovery=1#这个参数在丛库上一定要加上 query_cache_type = off query_cache_size = 0

#这两项是禁用缓存,这个使服务器用途而定:写比较多的数据库最好禁用,因为没写一次他要修改缓存中的数据,给数据库带来额外的开销,读比较的可以开启,可以提高查询效率

#一下4个参数是mysql5.6上的新特性

innodb_buffer_pool_dump_at_shutdown = 1 #解释:在关闭时把热数据dump到本地磁盘。 innodb_buffer_pool_dump_now = 1 #解释:采用手工方式把热数据dump到本地磁盘。 innodb_buffer_pool_load_at_startup = 1 #解释:在启动时把热数据加载到内存。 innodb_buffer_pool_load_now = 1 #解释:采用手工方式把热数据加载到内存。 read_buffer_size = 2m sort_buffer_size = 2m join_buffer_size = 1m key_buffer_size = 2g thread_cache_size = 2048 open_files_limit=65535 innodb_open_files = 8192 max_allowed_packet = 64m thread_stack = 512k

max_length_for_sort_data = 16k tmp_table_size = 256m

max_heap_table_size = 256m max_connections = 4000

max_connect_errors = 30000 innodb_read_io_threads = 8 innodb_write_io_threads = 16 innodb_flush_method = o_direct

innodb_io_capacity = 20000#根据硬盘的情况修改,stat的用100,sas的200,sas做riad10的为400fision-io的可以设置为20000 innodb_buffer_pool_size = 72g#内存的80% innodb_buffer_pool_instances=18 thread_concurrency=0

innodb_thread_concurrency = 0 innodb_log_buffer_size = 16m innodb_lock_wait_timeout = 60 innodb_old_blocks_time=1000 innodb_use_native_aio = 1 innodb_purge_threads=1

innodb_change_buffering=inserts

############################################## 二、sql语句的优化

前期的配置优化做完,其实在很长的一段时间内,基本上不用在去优化了。而一条sql使用不当,致使整个数据库故障的情况相信做dba的经常遇到。所以,sql语句的优化和审核才是每个dba的重中之重。

sql语句的优化,一般的基本原则有以下几个方面: 1、 尽量稍作计算

mysql的作用是用来存取数据的,不是做计算的,做计算的话可以用其他方法去实现,mysql做计算是很耗资源的。 2.尽量少 join

mysql 的优势在于简单,但这在某些方面其实也是其劣势。mysql 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 join,一方面由于其优化器受限,再者在 join 这方面所下的功夫还不够,所以性能表现离 oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。 3.尽量少排序

排序操作会消耗较多的 cpu 资源,所以减少排序可以在缓存命中率高等 io 能力足够的场景下会较大影响 sql的响应时间。

对于mysql来说,减少排序有多种办法,比如: 通过利用索引来排序的方式进行优化 减少参与排序的记录条数 非必要不对数据进行排序 4.尽量避免 select *

在数据量少并且访问量不大的情况下,select * 没有什么影响,但是量级达到一定级别的时候,在执行效率和io资源的使用上,还是有很大关系的,用什么字段取什么字段,减少不必要的资源浪费。

之前遇到过因为一个字段存储的数据比较大,并发高的情况下把网络带宽跑满的情况,造成网站打不开或是打开速度极慢的情况。 5.尽量用 join 代替子查询 虽然 join 性能并不佳,但是和 mysql 的子查询比起来还是有非常大的性能优势。mysql 的子查询执行计划一直存在较大的问题,虽然这个问题已经存在多年,但是到目前已经发布的所有稳定版本中都普遍存在,一直没有太大改善。虽然官方也在很早就承认这一问题,并且承诺尽快解决,但是至少到目前为止我们还没有看到哪一个版本较好的解决了这一问题。 6.尽量少 or

当 where 子句中存在多个条件以“或”并存的时候,mysql 的优化器并没有很好的解决其执行计划优化问题,再加上 mysql 特有的 sql 与 storage 分层架构方式,造成了其性能比较低下,很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果。

7.尽量用 union all 代替 union

union 和 union all 的差异主要是前者需要将两个(或者多个)结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的 cpu 运算,加大资源消耗及延迟。所以当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候,尽量使用 union all 而不是 union。

8.尽量早过滤

这一优化策略其实最常见于索引的优化设计中(将过滤性更好的字段放得更靠前)。 在 sql 编写中同样可以使用这一原则来优化一些 join 的 sql。比如我们在多个表进行分页数据查询的时候,我们最好是能够在一个表上先过滤好数据分好页,然后再用分好页的结果集与另外的表 join,这样可以尽可能多的减少不必要的 io 操作,大大节省 io 操作所消耗的时间。篇三:mysql常用基本sql语句小结 mysql:常用基本sql语句小结(转载) sql分类:

ddl—数据定义语言(create,alter,drop,declare) dml—数据操纵语言(select,delete,update,insert) 首先,简要介绍基础语句: 1、说明:创建数据库

create database database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device use master exec sp_addumpdevice ?disk?, ?testback?, ?c:mssql7backupmynwind_1.dat? --- 开始 备份

backup database pubs to testback 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表:

a:create table tab_new like tab_old (使用旧表创建新表)

b:create table tab_new as select col1,col2? from tab_old definition only 5、说明:

删除新表:drop table tabname 6、说明:

增加一个列:alter table tabname add column col type

注:列增加后将不能删除。db2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:

添加主键:alter table tabname add primary key(col) 说明:

删除主键:alter table tabname drop primary key(col) 8、说明:

创建索引:create [unique] index idxname on tabname(col?.) 删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。 9、说明:

创建视图:create view viewname as select statement 删除视图:drop view viewname

10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ?%value1%? ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc] 总数:select count * as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 a: union 运算符

union 运算符通过组合其他两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表。当 all 随 union 一起使用时(即 union all),不消除重复行。两种情况下,派生表的每一行不是来自 table1 就是来自 table2。 b: except 运算符

except 运算符通过包括所有在 table1 中但不在 table2 中的行并消除所有重复行而派生出一个结果表。当 all 随 except 一起使用时 (except all),不消除重复行。 c: intersect 运算符

intersect 运算符通过只包括 table1 和 table2 中都有的行并消除所有重复行而派生出一个结果表。当 all 随 intersect 一起使用时 (intersect all),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 a、left outer join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 sql: