mysql
转身
php工程师
展开
-
update使用外联
update b表 inner join a表 on b表.name2=a表.name1<br /> set b表.num3=num1-num2原创 2011-05-14 20:33:00 · 665 阅读 · 0 评论 -
mysql字段对索引的影响
这几天做了个需求,设计到一个工号的字段,这个字段有些是可以存为整数的,有些必须是字符,所以在数据表中字段的类型设置为了varchar的字符型但是同事在写sql的时候,where中做了判断,如果工号是整数的,那么就不加引号,字符就加引号比如:auid是varchar的类型select * from member where auid=1234 or auid='T2322'当然这原创 2012-06-25 10:57:24 · 1045 阅读 · 0 评论 -
MySQL 超大数据量的一些优化
1.IN 就相当于 OR,如果使用一个 IN 查询聚合索引第一列,那么整个聚合索引就只相当于第一个键索引,聚合将失效。2.避免相关子查询 一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。3.使用临时原创 2012-02-09 15:15:52 · 959 阅读 · 0 评论 -
大数据量时Mysql的优化要点
1、对查询进行优化、应尽量避免全表扫描、首先应考虑在 where 及 order by 涉及的列上建立索引。2、应尽量避免在 where 子句中对字段进行 null 值判断、否则将导致引擎放弃使用索引而进行全表扫描、如:select id from t where num is null;--可以在num上设置默认值0、确保表中num列没有null值、然后这样查询:se转载 2012-02-09 14:33:27 · 791 阅读 · 0 评论 -
MySQL Order by 、Group by 、Distinct的优化
一、Order by 的实现与优化: 在MySQL中,Order by的实现有两种,一是通过有序的索引直接取得有序的数据直接返回客户端;二是通过MySQL的排序算法进行排序后在将排序后的数据返回到客户端。 经实践证明利用索引实现数据排序的方法是MySQL 中实现结果集排序的最佳做法,可以完全避免因为排序计算所带来的资源消耗。所以,在我们优化Query 语句中的OR转载 2012-02-02 16:28:48 · 4368 阅读 · 0 评论 -
用TIMESTAMP类型取代INT和DATETIME
时间在我们开发中应用非常普遍,大部分开发中我们将用Mysql的datetime格式来存储,但是对于经常用时间来排序或者查询的应用中,我们要将时间做成索引,这个就跟查询效率很有关系,但是很多程序员会用int来存时间戳,然后再进行处理 1、首先是我们分析datetime长度是8个字节,INT的长度是4个字节,存储空间上比datatime少。 2、int存储索引的空间也比原创 2011-11-24 10:15:43 · 8335 阅读 · 0 评论 -
mysql中int、bigint、smallint 和 tinyint的区别
使用整数数据的精确数字数据类型。bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。int从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的转载 2011-11-22 20:44:55 · 47648 阅读 · 3 评论 -
mysql decimal、numeric数据类型
可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12.幸好m转载 2011-07-12 15:15:05 · 1058 阅读 · 0 评论 -
explain select ....结果中各字段含义
<br />key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。注意通过key_len值我们可以确定MySQL将实际使用一个多部关键字的几个部分。ref列显示使用哪个列或常数与key一起从表中选择行。rows列显示MySQL认为它执行查询时必须检查的行数。Extra该列包含MySQL解决查询的详细信息。下面解释了该列可以显示的不同的文本字符串:<br />Distinct MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。<br />Not exists MySQ转载 2011-05-05 16:27:00 · 1389 阅读 · 0 评论 -
Mysql下索引优化,索引优化原理基本通用
1、创建索引对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。2,复合索引比如有一条语句是这样的:select * from users where原创 2011-05-05 15:24:00 · 1351 阅读 · 0 评论 -
Mysql UNIX时间戳和日期转换函数
<br />在mysql中把时间保持为unix时间戳可以提高代时间查询的sql语句速度,而且在不同时区转移数据可以更好的转换日期时间,但弊端就是在mysql管理器中看不到直观的日期时间, <br />mysql当然有解决的方法了 from_unixtime函数就是专门解决这个问题.用法如下: <br />UNIX时间戳转换为日期用函数: FROM_UNIXTIME() <br />select FROM_UNIXTIME(1156219870); <br /><br />日期转换为UNIX时间戳用函数: U原创 2011-05-03 16:12:00 · 6085 阅读 · 0 评论 -
常用mysql 命令语句
获取表结构SHOW create TABLE 表名;原创 2011-05-04 15:36:00 · 876 阅读 · 0 评论 -
mysql优化Analyze Table
Analyze Table<br /><br />MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集一些相关信息,其中就包括表的cardinality(可以翻译为“散列程度”),它表示某个索引对应的列包含多少个不同的值——如果cardinality大大少于数据的实际散列程度,那么索引就基本失效了。<br />我们可以使用SHOW INDEX语句来查看索引的散列程度:<br /><br />SHOW INDEX FROM PLAYERS;<br /><br />TABLE KEY原创 2011-05-04 14:55:00 · 36194 阅读 · 1 评论 -
mysqli->multi_query()执行多条语句
<br />使用mysqli对象中的query()方法每次调用只能执行一条SQL命令。如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_query()方法。具体做法是把多条SQL命令写在同一个字符串里作为参数传递给multi_query()方法,多条SQL之间使用分号 (;)分隔。如果第一条SQL命令在执行时没有出错,这个方法就会返回TRUE,否则将返回FALSE。 <br />因为multi_query()方法能够连接执行一个或多个查询,而每条SQL命令都可能返回一个结果,在必要原创 2011-05-03 17:22:00 · 11366 阅读 · 0 评论 -
SQL语句inner join,left join ,right join连接的不同之处
<br />表A记录如下: <br />aID aNum <br />1 a20050111 <br />2 a20050112 <br />3 a20050113 <br />4 a20050114 <br />5 a20050115 <br /><br />表B记录如下: <br />bID bName <br />1 2006032401 <br原创 2011-05-03 16:09:00 · 764 阅读 · 0 评论 -
尽量为innodb表指定主键
如果不指定主键,InnoDB会产生一个全局的rowid序列。所有InnoDB非主键表共享这一序列,并发性能较差,因此建议所有InnoDB表,指定主键。原创 2012-08-27 10:53:40 · 846 阅读 · 0 评论