您当前的位置:首页 > 互联网教程

MySQL支持大小写不敏感查询mysql不区分大写

发布时间:2025-05-16 08:27:20    发布人:远客网络

MySQL支持大小写不敏感查询mysql不区分大写

一、MySQL支持大小写不敏感查询mysql不区分大写

MySQL的大小写不敏感查询功能是指,在进行数据查询时,MySQL可以忽略查询语句中的大小写差异。这样,即使查询语句中的字母大小写不同,也可以正确地返回相应的结果,提高了查询操作的效率和精确度。本文将介绍MySQL支持大小写不敏感查询的相关知识,以及如何在编写查询语句时使用这一功能。

在MySQL中进行查询时,可以设置大小写不敏感查询功能,这样无论查询语句中的字母大小写如何,都可以正确地返回查询结果。这一功能在处理一些需要精确匹配的查询时尤为实用。比如,在用户登录验证时,用户名和密码的大小写就需要匹配才能进行验证。若使用大小写不敏感查询,可以确保查询结果的准确性。

如何设置MySQL支持大小写不敏感查询

在MySQL中设置大小写不敏感查询功能,只需要在查询语句中添加相应的语句即可。以下是一些例子:

使用COLLATE关键字可以明确地告诉MySQL,使用哪种大小写模式进行查询。常见的大小写模式有“utf8_general_ci”和“utf8_bin”。其中,“ci”代表大小写不敏感,而“bin”代表大小写敏感。下面是一个例子:

SELECT* FROM table_name WHERE column_name COLLATE utf8_general_ci=‘search_string’;

这条语句表示在table_name表中的column_name列中查找‘search_string’,进行的是大小写不敏感的查询。

LOWER()和UPPER()函数分别可以将查询语句中的字符转换成小写和大写形式。使用这两个函数可以让查询语句的字母大小写统一,方便进行大小写不敏感的查询。下面是一个例子:

SELECT* FROM table_name WHERE LOWER(column_name)= LOWER(‘search_string’);

这条语句表示在table_name表中的column_name列中查找‘search_string’,进行的是大小写不敏感的查询。

需要注意的是,使用LOWER()和UPPER()函数虽然可以进行大小写不敏感的查询,但会增加数据库的负担,尽量少用。

在MySQL中,支持大小写不敏感的查询可以简化查询操作,提高查询效率和精确度。不同的情况下,可以根据需求选择不同的大小写模式进行查询。

1. utf8_general_ci:基于UTF-8编码,大小写不敏感。该模式适用于需要进行多语种查询的情境。

2. utf8_bin:基于UTF-8编码,大小写敏感。该模式适用于需要精确匹配的情境。

需要注意的是,使用大小写不敏感的查询要慎重考虑,确保其查询结果的准确性。此外,在使用LOWER()和UPPER()函数时,应注意其对数据库负荷的影响,尽量减少使用。

SELECT* FROM users WHERE eml COLLATE utf8_general_ci=‘example@eml.com’;

这条语句将返回users表中所有eml为‘example@eml.com’的记录,忽略其中的大小写差异。

本文介绍了MySQL支持大小写不敏感查询的相关知识,以及如何在编写查询语句时使用这一功能。在进行数据库查询操作时,尤其是需要进行精确匹配的操作时,使用大小写不敏感查询可以提高操作效率和准确度,更好地满足我们的实际需求。

二、mysql 数据类型的详解

MySQL的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL允许我们指定数值字段中的值是否有正负之分或者用零填补。

表列出了各种数值类型以及它们的允许范围和占用的内存空间。

类型大小范围(有符号)范围(无符号)用途

TINYINT 1字节(-128,127)(0,255)小整数值

SMALLINT 2字节(-32 768,32 767)(0,65 535)大整数值

MEDIUMINT 3字节(-8 388 608,8 388 607)(0,16 777 215)大整数值

INT或INTEGER 4字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值

BIGINT 8字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值

FLOAT 4字节(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度

DOUBLE 8字节(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度

DECIMAL对DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

在 MySQL中支持的 5个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT,INT和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。

MySQL以一个可选的显示宽度指示器的形式对 SQL标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

万一我们需要对一个字段存储一个超出许可范围的数字,MySQL会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL会在不合规定的值插入表前自动修改为 0。

UNSIGNED修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围。

ZEROFILL修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL数据库存储负值。

MySQL支持的三个浮点类型是 FLOAT、DOUBLE和 DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而 DOUBLE数值类型用于表示双精度浮点数值。

与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。比如语句 FLOAT(7,3)规定显示的值不会超过 7位数字,小数点后面带有 3位数字。

对于小数点后面的位数超过允许范围的值,MySQL会自动将它四舍五入为最接近它的值,再插入它。

DECIMAL数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句 DECIMAL(7,3)规定了存储的值不会超过 7位数字,并且小数点后不超过 3位。

忽略 DECIMAL数据类型的精度和计数方法修饰符将会使 MySQL数据库把所有标识为这个数据类型的字段精度设置为 10,计算方法设置为 0。

UNSIGNED和 ZEROFILL修饰符也可以被 FLOAT、DOUBLE和 DECIMAL数据类型使用。并且效果与 INT数据类型相同。

MySQL提供了 8个基本的字符串类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

TINYBLOB 0-255字节不超过 255个字符的二进制字符串

TINYTEXT 0-255字节短文本字符串

BLOB 0-65 535字节二进制形式的长文本数据

MEDIUMBLOB 0-16 777 215字节二进制形式的中等长度文本数据

MEDIUMTEXT 0-16 777 215字节中等长度文本数据

LOGNGBLOB 0-4 294 967 295字节二进制形式的极大文本数据

LONGTEXT 0-4 294 967 295字节极大文本数据

CHAR类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。

CHAR类型可以使用 BINARY修饰符。当用于比较运算时,这个修饰符使 CHAR以二进制方式参于运算,而不是以传统的区分大小写的方式。

CHAR类型的一个变体是 VARCHAR类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在 0-255之间的指示器。CHAR和 VARCHGAR不同之处在于 MuSQL数据库处理这个指示器的方式:CHAR把这个大小视为值的大小,不长度不足的情况下就用空格补足。而 VARCHAR类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的 VARCHAR类型不会被空格填补,但长于指示器的值仍然会被截短。

因为 VARCHAR类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR类型可以大大地节约磁盘空间、提高存储效率。

VARCHAR类型在使用 BINARY修饰符时与 CHAR类型完全相同。

对于字段长度要求超过 255个的情况下,MySQL提供了 TEXT和 BLOB两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。

TEXT和 BLOB类型在分类和比较上存在区别。BLOB类型区分大小写,而 TEXT不区分大小写。大小修饰符不用于各种 BLOB和 TEXT子类型。比指定类型支持的最大范围大的值将被自动截短。

在处理日期和时间类型的值时,MySQL带有 5个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL带有内置功能可以把多样化的输入格式变为一个标准格式。

DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD日期值

TIME 3'-838:59:59'/'838:59:59' HH:MM:SS时间值或持续时间

DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS混合日期和时间值

TIMESTAMP 8 1970-01-01 00:00:00/2037年某时 YYYYMMDD HHMMSS混合日期和时间值,时间戳

MySQL用 DATE和 TEAR类型存储简单的日期值,使用 TIME类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE类型的值应该使用连字号作为分隔符分开,而 TIME类型的值应该使用冒号作为分隔符分开。

需要注意的是,没有冒号分隔符的 TIME类型值,将会被 MySQL理解为持续的时间,而不是时间戳。

MySQL还对日期的年份中的两个数字的值,或是 SQL语句中为 TEAR类型输入的两个数字进行最大限度的通译。因为所有 TEAR类型的值必须用 4个数字存储。MySQL试图将 2个数字的年份转换为 4个数字的值。把在 00-69范围内的值转换到 2000-2069范围内。把 70-99范围内的值转换到 1970-1979之内。如果 MySQL自动转换后的值并不符合我们的需要,请输入 4个数字表示的年份。

除了日期和时间数据类型,MySQL还支持 DATEYIME和 TIMESTAMP这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。

如果我们对 TIMESTAMP类型的字段没有明确赋值,或是被赋与了 null值。MySQL会自动使用系统当前的日期和时间来填充它。

MySQL还支持两种复合数据类型 ENUM和 SET,它们扩展了 SQL规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个 ENUM类型只允许从一个集合中取得一个值;而 SET类型允许从一个集合中取得任意多个值。

ENUM类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM类型字段可以从集合中取得一个值或使用 null值,除此之外的输入将会使 MySQL在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL会自动使用插入值的大小写转换成与集合中大小写一致的值。

ENUM类型在系统内部可以存储为数字,并且从 1开始用数字做索引。一个 ENUM类型最多可以包含 65536个元素,其中一个元素被 MySQL保留,用来存储错误信息,这个错误值用索引 0或者一个空字符串表示。

MySQL认为 ENUM类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0的行就可以很容易地找到错误记录的位置。

SET类型与 ENUM类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。并且与 ENUM类型相同的是任何试图在 SET类型字段中插入非预定义的值都会使 MySQL插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL将会保留合法的元素,除去非法的元素。

一个 SET类型最多可以包含 64项元素。在 SET元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。并且它还去除了重复的元素,所以 SET类型中不可能包含两个相同的元素。

希望从 SET类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0的行。

三、如何设置合理的mysql的参数

[client]\x0d\x0aport= 3306\x0d\x0asocket=/tmp/mysql.sock\x0d\x0a[mysqld]\x0d\x0aport= 3306\x0d\x0asocket=/tmp/mysql.sock\x0d\x0a\x0d\x0abasedir=/usr/local/mysql\x0d\x0adatadir=/data/mysql\x0d\x0apid-file=/data/mysql/mysql.pid\x0d\x0auser= mysql\x0d\x0abind-address= 0.0.0.0\x0d\x0aserver-id= 1#表示是本机的序号为1,一般来讲就是master的意思\x0d\x0a\x0d\x0askip-name-resolve\x0d\x0a#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,\x0d\x0a#则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求\x0d\x0a\x0d\x0a#skip-networking\x0d\x0a\x0d\x0aback_log= 600\x0d\x0a# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,\x0d\x0a#然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。\x0d\x0a#如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,\x0d\x0a#以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。\x0d\x0a#另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。\x0d\x0a#你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。\x0d\x0a\x0d\x0amax_connections= 1000\x0d\x0a# \x0d\x0aMySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,\x0d\x0a介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接\x0d\x0a数量,以定夺该值的大小。\x0d\x0a\x0d\x0amax_connect_errors= 6000\x0d\x0a#对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。\x0d\x0a\x0d\x0aopen_files_limit= 65535\x0d\x0a# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit-n的值,哪个大用哪个,\x0d\x0a#当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。\x0d\x0a\x0d\x0atable_open_cache= 128\x0d\x0a# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64\x0d\x0a#假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);\x0d\x0a#当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上\x0d\x0a\x0d\x0amax_allowed_packet= 4M\x0d\x0a#接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。\x0d\x0a#该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。\x0d\x0a\x0d\x0abinlog_cache_size= 1M\x0d\x0a#一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K\x0d\x0a\x0d\x0amax_heap_table_size= 8M\x0d\x0a#定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变\x0d\x0a\x0d\x0atmp_table_size= 16M\x0d\x0a# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。\x0d\x0a#大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表(所有列的长度的和)或包含BLOB列的表存储在硬盘上。\x0d\x0a#\x0d\x0a \x0d\x0a如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。\x0d\x0a还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查\x0d\x0a询速度的效果\x0d\x0a\x0d\x0aread_buffer_size= 2M\x0d\x0a# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。\x0d\x0a#如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能\x0d\x0a\x0d\x0aread_rnd_buffer_size= 8M\x0d\x0a# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,\x0d\x0a# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大\x0d\x0a\x0d\x0asort_buffer_size= 8M\x0d\x0a# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。\x0d\x0a#如果不能,可以尝试增加sort_buffer_size变量的大小\x0d\x0a\x0d\x0ajoin_buffer_size= 8M\x0d\x0a#联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享\x0d\x0a\x0d\x0athread_cache_size= 8\x0d\x0a#这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,\x0d\x0a#如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,\x0d\x0a#增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(_>表示要调整的值)\x0d\x0a#根据物理内存设置规则如下:\x0d\x0a# 1G—> 8\x0d\x0a# 2G—> 16\x0d\x0a# 3G—> 32\x0d\x0a#大于3G—> 64\x0d\x0a\x0d\x0aquery_cache_size= 8M\x0d\x0a#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,\x0d\x0a#今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。\x0d\x0a#通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,\x0d\x0a#如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,\x0d\x0a#这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲\x0d\x0a\x0d\x0aquery_cache_limit= 2M\x0d\x0a#指定单个查询能够使用的缓冲区大小,默认1M\x0d\x0a\x0d\x0akey_buffer_size= 4M\x0d\x0a#指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,\x0d\x0a#系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,\x0d\x0a#可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,\x0d\x0a#至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低\x0d\x0a\x0d\x0aft_min_word_len= 4\x0d\x0a#分词词汇最小长度,默认4\x0d\x0a\x0d\x0atransaction_isolation= REPEATABLE-READ\x0d\x0a# MySQL支持4种事务隔离级别,他们分别是:\x0d\x0a# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.\x0d\x0a#如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED\x0d\x0a\x0d\x0alog_bin= mysql-bin\x0d\x0abinlog_format= mixed\x0d\x0aexpire_logs_days= 30#超过30天的binlog删除\x0d\x0a\x0d\x0alog_error=/data/mysql/mysql-error.log#错误日志路径\x0d\x0aslow_query_log= 1\x0d\x0along_query_time= 1#慢查询时间超过1秒则为慢查询\x0d\x0aslow_query_log_file=/data/mysql/mysql-slow.log\x0d\x0a\x0d\x0aperformance_schema= 0\x0d\x0aexplicit_defaults_for_timestamp\x0d\x0a\x0d\x0a#lower_case_table_names= 1#不区分大小写\x0d\x0a\x0d\x0askip-external-locking#MySQL选项以避免外部锁定。该选项默认开启\x0d\x0a\x0d\x0adefault-storage-engine= InnoDB#默认存储引擎\x0d\x0a\x0d\x0ainnodb_file_per_table= 1\x0d\x0a# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间\x0d\x0a#独立表空间优点:\x0d\x0a# 1.每个表都有自已独立的表空间。\x0d\x0a# 2.每个表的数据和索引都会存在自已的表空间中。\x0d\x0a# 3.可以实现单表在不同的数据库中移动。\x0d\x0a# 4.空间可以回收(除drop table操作处,表空不能自已回收)\x0d\x0a#缺点:\x0d\x0a#单表增加过大,如超过100G\x0d\x0a#结论:\x0d\x0a#共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files\x0d\x0a\x0d\x0ainnodb_open_files= 500\x0d\x0a#限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300\x0d\x0a\x0d\x0ainnodb_buffer_pool_size= 64M\x0d\x0a# InnoDB使用一个缓冲池来保存索引和原始数据,不像MyISAM.\x0d\x0a#这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.\x0d\x0a#在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%\x0d\x0a#不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.\x0d\x0a#注意在32位系统上你每个进程可能被限制在 2-3.5G用户层面内存限制,\x0d\x0a#所以不要设置的太高.\x0d\x0a\x0d\x0ainnodb_write_io_threads= 4\x0d\x0ainnodb_read_io_threads= 4\x0d\x0a# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU核数来更改,默认是4\x0d\x0a#注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64\x0d\x0a\x0d\x0ainnodb_thread_concurrency= 0\x0d\x0a#默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量\x0d\x0a\x0d\x0ainnodb_purge_threads= 1\x0d\x0a# InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。\x0d\x0a#从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单\x0d\x0a#独线程,默认情况下参数设置为0(不使用单独线程),设置为 1时表示使用单独的清除线程。建议为1\x0d\x0a\x0d\x0ainnodb_flush_log_at_trx_commit= 2\x0d\x0a# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。\x0d\x0a#主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1\x0d\x0a# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。\x0d\x0a# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。\x0d\x0a#每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有缓存的,所以这个写入并不能保证数据已经写入到物理磁盘\x0d\x0a#默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。\x0d\x0a#设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。\x0d\x0a#总结\x0d\x0a#设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能\x0d\x0a\x0d\x0ainnodb_log_buffer_size= 2M\x0d\x0a#此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间\x0d\x0a\x0d\x0ainnodb_log_file_size= 32M\x0d\x0a#此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间\x0d\x0a\x0d\x0ainnodb_log_files_in_group= 3\x0d\x0a#为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3\x0d\x0a\x0d\x0ainnodb_max_dirty_pages_pct= 90\x0d\x0a# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%\x0d\x0a\x0d\x0ainnodb_lock_wait_timeout= 120 \x0d\x0a# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒\x0d\x0a\x0d\x0abulk_insert_buffer_size= 8M\x0d\x0a#批量插入缓存大小,这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时,提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。\x0d\x0a\x0d\x0amyisam_sort_buffer_size= 8M\x0d\x0a# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区\x0d\x0a\x0d\x0amyisam_max_sort_file_size= 10G\x0d\x0a#如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出\x0d\x0a\x0d\x0amyisam_repair_threads= 1\x0d\x0a#如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) \x0d\x0a\x0d\x0ainteractive_timeout= 28800\x0d\x0a#服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)\x0d\x0a\x0d\x0await_timeout= 28800\x0d\x0a#服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,\x0d\x0a#取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)\x0d\x0a# MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,\x0d\x0a#应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,\x0d\x0a#最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。\x0d\x0a#在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,\x0d\x0a#可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。\x0d\x0a\x0d\x0a[mysqldump]\x0d\x0aquick\x0d\x0amax_allowed_packet= 16M#服务器发送和接受的最大包长度\x0d\x0a[myisamchk]\x0d\x0akey_buffer_size= 8M\x0d\x0asort_buffer_size= 8M\x0d\x0aread_buffer= 4M\x0d\x0awrite_buffer= 4M



相关内容FAQs: