Archive For The “mysql学习” Category
前几天,在写一个SQL语句的时候,where后面明明有限制条件,却每次都将表中其它数据也取出来了。测试了半天还是不行。 这到底是什么原因呢? 最后才发现 ,原来有一个字段我用的是varchar ,里面的值 又是 也逗号分隔的,如 1,2,3,4 但 SQL语句中却用的是这样的 receive_id = 1 ,结果就会出现上面的问题,原来是MYSQL 会自动将1,2,3,4自动转换成int 型,这样一转,就转成 1了,所以结果中老有 1,2,3,4 这样的记录。改成 is_read = ’1′ ,一切终于ok 了。 总结: int 型的 可以写成 字符型 ,如is_del = ’1′ (is_del 为tinyint型),但字符型的不能写成 int 型 ,如 is_read = 1 ,(is_read 为varchar ) 结果就错了。
sql优化时使用mysql索引应注意的问题 1 .索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。 2 . 使用短索引 对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 3 . 索引列排序 MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。 4 . like语句操作 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。 5 . 不要在列上进行函数运算 select * from users where YEAR(adddate)
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢? 其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上如下代码: log-slow-queries=/var/lib/mysql/slowquery.log long_query_time=2 注: log-slow-queries 设置把日志写在那里,为空的时候,系统会给慢查询日志赋予主机名,并被附加slow.log. /var/lib/mysql/slowquery.log为日志存放的文件的位置,一般这个目录要有mysql的运行帐号的可写权限,一般都将这个目录设置为mysql的数据存放目录 long_query_time=2中的2表示查询超过两秒才记录. 如果设置了参数log-long-format,那么所有没有使用索引的查询也将被记录。在文件my.cnf或my.ini中加入下面这一行可以记录这些查询 这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用) # Time: 070927 8:08:52 # User@Host: root[root] @ [192.168.0.20] # Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630 select id, name from manager where id in (66,10135); 这是慢查询日志中的一条,用了372秒,锁了136秒,返回152行,一共查了263630行 如果日志内容很多,用眼睛一条一条去看会累死,mysql自带了分析的工具,使用方法如下: 命令行下,进入mysql/bin目录,输入mysqldumpslow –help或–help可以看到这个工具的参数,主要有 Usage: mysqldumpslow [ OPTS... ] [ LOGS... ] Parse and summarize the MySQL [...]
Mysql的SQL语句执行时间 查看 MySQL 語法 詳細執行時間 與 CPU/記憶體使用量: MySQL Query Profiler MySQL 的 SQL 語法調整主要都是使用 EXPLAIN , 但是這個並沒辦法知道詳細的 Ram(Memory)/CPU 等使用量. 於 MySQL 5.0.37 以上開始支援 MySQL Query Profiler, 可以查詢到此 SQL 會執行多少時間, 並看出 CPU/Memory 使用量, 執行過程中 System lock, Table lock 花多少時間等等. MySQL Query Profile 詳細介紹可見: Using the New MySQL Query Profiler (2007.04.05 發表) 效能分析主要分下述三種(轉載自上篇): * Bottleneck analysis – [...]
