韦德国际_韦德国际1946官方网站_韦德国际1946手机版
做最好的网站

询问优化,索引和优化

日期:2019-06-18编辑作者:韦德国际1946手机版

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp"
export CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-unix-socket-path=/tmp/mysql3306.sock --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-plugins=max
1、当你用-static链接时,能够博得最快的可实行文件
询问优化,索引和优化。2、在Linux上,最佳用pgcc和-O3编写翻译服务器

[client]
port=3306
socket=/tmp/mysql.sock

[mysql]
port=3306
socket=/tmp/mysql.sock
no-auto-rehash
default-character-set=utf8
prompt=\u@\d \R:\m>

[mysqld]
##GENERAL
port=3306
server_id=164234
socket=/tmp/mysql.sock
datadir=/data/dbdata/mysqldata
basedir=/usr/local/mysql
transaction_isolation = REPEATABLE-READ
back_log=500
#event_scheduler=ON


sql_mode="NO_ENGINE_SUBSTITUTION"

##INNODB DATA
innodb_file_per_table=1    #独享表空间开启
innodb_page_size = 16384 
#innodb_additional_mem_pool_size=20M   #用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小
innodb_buffer_pool_size=18G
innodb_data_file_path=ibdata1:1G:autoextend     #表空间文件 重要数据
innodb_data_home_dir=/data/dbdata/mysqldata
innodb_read_io_threads=4      #innodb_data_home_dir
innodb_write_io_threads=4      #文件IO的线程数,一般为 4,但是在 Windows 下,可以设置得较大
innodb_lock_wait_timeout=60    # InnoDB 有其内置的死锁检测机制,能导致未完成的事务回滚。但是,如果结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB无法识别死锁。为消除这种可能性,可以将innodb_lock_wait_timeout设置为一个整数值,指示 MySQL在允许其他事务修改那些最终受事务回滚的数据之前要等待多长时间(秒数)
innodb_adaptive_hash_index = 1
innodb_adaptive_flushing = 1
innodb_thread_concurrency=16   #服务器有几个CPU就设置为几,建议用默认设置,一般为8.
innodb_flush_method=O_DIRECT
innodb_file_format = Barracuda
innodb_max_dirty_pages_pct = 75
innodb_io_capacity=500

innodb_log_files_in_group = 3       #为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3M
innodb_flush_log_at_trx_commit = 2   # 如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,可以设置为0或2,但要承担在发生故障时丢失数据的风险。设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志,但日志文件每次刷新到磁盘一次

##INNODB LOG
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=64M
innodb_log_file_size=512M
innodb_log_files_in_group=3
innodb_log_group_home_dir=/data/dbdata/mysqldata


##MyISAM
key_buffer_size=64M
myisam_sort_buffer_size = 128M       # MyISAM表发生变化时重新排序所需的缓冲
myisam_max_sort_file_size = 10G    #MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
concurrent_insert = 2   #并发插入

##[BINARY SLOW RELAY] LOG
sync_binlog=1   
binlog_format=row
max_binlog_size=1G
log_bin=/data/dbdata/mysqllog/binlog/binlog.bin
log_bin_trust_function_creators=1
expire_logs_days=6
slow_query_log
slow_query_log_file=/data/dbdata/mysqllog/slow-query.log
long_query_time=1
relay-log=/data/dbdata/mysqllog/relay-log/relay-log.bin
log_slave_updates=1

##PRIVITE CACHE
read_buffer_size = 4M     # MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享
read_rnd_buffer_size = 4M   # MySql的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
bulk_insert_buffer_size = 64M      #批量插入数据缓存大小,可以有效提高插入效率,默认为8M
sort_buffer_size = 6M
join_buffer_size = 4M   #用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

##[QUERY THREAD TABLE]CACHE
query_cache_type = 0
query_cache_size = 0
query_cache_limit = 2M
tmp_table_size = 64M     # tmp_table_size 的默认大小是 32M。内部内存临时表的最大大小,如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。如果超过该值,则会将临时表写入磁盘。
table_open_cache = 5120
#thread_cache=8
thread_cache_size=8    # 服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。设置规则如下:1GB 内存配置为8,2GB配置为16,3GB配置为32,4GB或更高内存,可配置更大。
thread_concurrency=8   #服务器有几个CPU就设置为几,建议用默认设置,一般为8.
open_files_limit=65535   # 设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8,属重点优化参数

##MAX LIMIT
max_connections=1000
max_length_for_sort_data=8096      #决定使用哪种算法,超过指定字节使用另外一种算法
max_heap_table_size = 64M    #max_heap_table_size比tmp_table_size小时,则系统会把max_heap_table_size的值作为最大的内存临时表的上限,大于这个时,改写硬盘
max_allowed_packet=1G
max_connect_errors=100   #如果某个客户端的连接达到了max_connect_errors的限制,将被禁止访问

##TIME OUT
wait_timeout=28800
interactive_timeout=28800    #交互式等待超时时间(s)

##REPLICATE
#只复制某个表
replicate-ignore-db=mysql  
#不复制某些表(可用匹配符) 
replicate-wild-ignore-table=mysql.%     #跨库跟新保证主上执行的语句会同步到从上
#replicate-do-db=test
#replicate-wild-do-table=test.%


##OTHER
skip-external-locking     #跳过外部锁,多台机器调用一台数据库及其的话,容易造成死锁,这个参数会让请求排队,防止死锁
skip_name_resolve=1     #禁止域名解析
##slave_skip_errors = all
#auto_increment_increment = 2
#auto_increment_offset = 2
explicit_defaults_for_timestamp = true
secure_file_priv=''

[mysqldump]
max_allowed_packet=512M
quick

目录介绍
基本的属性优化

ref : http://coolshell.cn/articles/1846.html

作者“linux运维”

mysql参数:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_interactive_timeout
主从复制参数:https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html http://www.ningoo.net/html/2007/mysql_replication_configuration.html
http://www.cnblogs.com/ivictor/p/5311607.html

  1. 为查询缓存优化你的查询
    大多数的MySQL服务器都张开了询问缓存。那是进步性最实用的方法之一,而且那是被MySQL的数据库引擎管理的。当有成都百货上千完全一样的询问被推行了数十次的时候,那几个查询结果会被放到贰个缓存中,那样,后续的同样的查询就毫无操作表而直接待上访问缓存结果了。
    此间最关键的主题材料是,对于程序员来讲,那一个业务是很轻易被忽略的。因为,我们一点查询语句会让MySQL不利用缓存。请看上边包车型客车亲自去做:
    // 查询缓存不开启
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()");
    // 开启查询缓存
    $today = date("Y-m-d");
    $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
    下边两条SQL语句的距离便是 CULX570DATE() ,MySQL的询问缓存对这一个函数不起效能。所以,像 NOW() 和 RAND() 或是其它的那样的SQL函数都不会议及展览开查询缓存,因为这几个函数的回来是会不定的易变的。所以,你所急需的正是用三个变量来代表MySQL的函数,从而拉开缓存。
  2. 当只要一行数据时使用 LIMIT 1
    当您查询表的略微时候,你已经精晓结果只会有一条结果,但因为您恐怕供给去fetch游标,或是你大概会去反省重返的记录数。
    在这种景观下,加上 LIMIT 1 方可追加属性。那样同样,MySQL数据库引擎会在找到一条数据后停下搜索,而不是后续未来查少下一条符合记录的多寡。
    上边包车型大巴言传身教,只是为了找一下是或不是有“中中原人民共和国”的用户,很确定,前面包车型大巴会比前面包车型大巴更有功用。(请小心,第一条中是Select *,第二条是Select 1)

CXX=gcc CXXFLAGS=-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp export CFLAGS CXX CXXFLAGS ./configure --prefix=/usr/local/mysql --e...

// 没有效率的:
$r = mysql_query("SELECT * FROM user WHERE country = 'China'");
if (mysql_num_rows($r) > 0) {   // ...
}
// 有效率的:
$r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1");
if (mysql_num_rows($r) > 0) {   // ...
}
  1. 在Join表的时候使用一定类型的例,并将其索引
    如果您的应用程序有繁多 JOIN 查询,你应有承认两个表中Join的字段是被建过索引的。那样,MySQL内部会运行为您优化Join的SQL语句的编写制定。
    并且,那些被用来Join的字段,应该是一模二样的品类的。譬如:假诺你要把 DECamryL 字段和多少个 INT 字段Join在协同,MySQL就不能够运用它们的目录。对于那几个ST翼虎ING类型,还亟需有平等的字符集才行。(七个表的字符集有非常大恐怕差别)

本文由韦德国际发布于韦德国际1946手机版,转载请注明出处:询问优化,索引和优化

关键词: mysql 技术 存储入门

游标的切实可行行使方案,MySQL游标的应用

以下的稿子首要讲述的是MySQL 游标的有血有肉应用方案,如果您对MySQL游标的实操有趣味的话,你就能够对以下的稿子...

详细>>

韦德国际1946手机版:连日MySQL出现20一三不当化解

以下的篇章首要介绍的是CFMX连接MySQL四.一时平常出现错误的实际化解办法,后天把MySQL数据库晋级到四.一之后,其程序...

详细>>

韦德国际1946手机版:mysql访问数据库的步子详解

php访问mysql数据库的步调,phpmysql数据库 官方说五.5从头就吐弃mysql_韦德国际1946手机版:mysql访问数据库的步子详解,...

详细>>

【韦德国际1946手机版】MySQL数据库基本操作,M

MySQL学习笔记0二_数据库和表的基本操作,mysql学习笔记 02_1 操作数据库 (1)创立数据库 CREATE DATABASE [IF NOT EXISTS] db...

详细>>