随笔分类 - sql优化
摘要:对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,可能每天花费在数据导入上的时间就会长达几个小时之久。因此,优化数据库插入性能是很有意义的。 网络上的牛人很多,总会有一些手段可以提高insert效率,大家跟我一起分享一下吧: 1. 一条S...
阅读全文
摘要:一:缓存条件,原理MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELECT语句和该查询语句的结果集做了一个HASH映射并保存在一定的内存区域中。当客户端发起SQL查询时,Q...
阅读全文
摘要:一:根据用户的得分查询其排名答:先查出分数比当前用户高的有几个,在查出积分跟当前用户相等,时间早于这个用户的有几个,相加就是排名或set @i = 0;SELECT *, (@i := @i + 1) AS ranking from user_score order by score desc, c...
阅读全文
摘要:如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。例如,如果列a被定义为UNIQUE,并且包含值1,则以下 两个语句具有相同...
阅读全文
摘要:LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY 'string'] [[OPTIONA...
阅读全文
摘要:面向集合的思想SQL是为查询和管理关系型数据库中的数据而专门设计的一种标准语言。我们通常认为的关系型是说的数据库中表与表的关系,这个理解是有问题的,这里的关系其实是数学术语上的关系。为什么这么说?因为关系型数据库是以关系模型为基础,而关系模型是以集合论和谓词逻辑两大数学理论为依据的。集合论中,关系是集合的一种表示。在关系模型中,关系是相关信息的一个集合,反映到数据库中就是一张表。我们知道集合是不关心顺序的。表作为一个集合,它本身并没有顺序的概念。在很久之前有人问过,我按顺序插入id=1,2,3的记录,为什么查处来时和插入的顺序不一致。很多程序员都有这样的认为,就是从表选取记录时,记录是按插入顺
阅读全文
摘要:employees数据库:http://ari.iteye.com/blog/1066690https://launchpad.net/test-db/employees-db-1/1.0.6
阅读全文
摘要:http://blog.zol.com.cn/2210/article_2209590.html/*** 分表程序* * @author Shen Xi shen.xi@zol.com.cn* @date 2010-08-19*/set_time_limit(0);$con = mysql_connect("127.0.0.1","root","111111");#创建数据库连接mysql_select_db ("test",$con);#选择连接数据库“test”mysql_query("set nam
阅读全文
摘要:1,事务处理innodb 支持事务功能,myisam 不支持。Myisam 的执行速度更快,性能更好。2,select ,update ,insert ,delete 操作MyISAM:如果执行大量的SELECT,MyISAM是更好的选择InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表3,锁机制不同InnoDB 为行级锁,myisam 为表级锁。注意:当数据库无法确定,所找的行时,也会变为锁定整个表。如:update table set num = 10 where username like "%test%";4,
阅读全文
摘要:一、InnoDB特点优点:1、支持事务2、行锁3、支持外键缺点:1、不支持全文索引二、MyIsaMBLOB和TEXT列可以被索引。可以把数据文件和索引文件放在不同目录,用DATA DIRECTORY和INDEX DIRECTORY选项CREATE TABLE以获得更高的速度mysql备份:1:mysqldump几个常用用例:1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导
阅读全文
摘要:1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化。优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化。2. 数据库设计和查询优化在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,这一点是非常重要的。一个糟糕的Schema设计即使在性能调优的MySQL Server上运行,也会表...
阅读全文
摘要:1、先来看看多次删除插入操作后的表索引情况mysql> SHOW INDEX FROM `tbl_name`;+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part..
阅读全文
摘要:索引使用经验:1. 一条 SQL 语句只能使用 1 个索引 (5.0-),MySQL 根据表的状态,选择一个它认为最好的索引用于优化查询2. 联合索引,只能按从左到右的顺序依次使用Using where; Using filesort当EXPLAIN中的extra中出现Useing filesort时说明语句性能不好,需要优化。Using filesort 是一种速度很慢的外部排序。即使order by 后的字段加了索引,也可能出现Using filesort,因为有可能索引定义不当,MySQL 没有用到索引例如:explain SELECT * FROM table_item WHERE u
阅读全文
摘要:语法:alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER column_name ] or ADD INDEX [index_name] (index_col_name,...) or ADD PRIMARY KEY (index_col_name,...) or ADD UNIQUE [index_name] (index_col_name,...) or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} or CHANGE [COLUMN
阅读全文
摘要:PHP数据库长连接mysql_pconnect的细节:http://www.nowamagic.net/librarys/veda/detail/95
阅读全文
摘要:describe命令一、describe命令用于查看特定表的详细设计信息,例如为了查看guestbook表的设计信息,可用:describe guestbookdescribe ol_user userid二、可通过”show comnus”来查看数据库中表的列名,有两种使用方式:show columns form 表名 from 数据库名或者:show columns from 数据库名.表名三、用describe命令查询具体列的信息describe guestbook id就是查询guestbook中id字段的列信息{DESCRIBE | DESC} tbl_name [col_name
阅读全文
摘要:创建索引一:唯一索引alter table table_name add unique index_name(column_list); 例如:alter table users_game_task add unique unique_userid_taskid(userid, taskid);二:主键索引:PRIMARY KEY(主键索引)ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )alter table table_name add index index_name (column_list) ;alter table tab.
阅读全文
摘要:转于:http://justcoding.iteye.com/blog/2006487这是一篇来自Coding Horror的文章。SQL的Join语法有很多:有inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。假设我们有两张表。Table A是左边的表,Table B是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:A表idname1Pirate2Monkey3Ninja4SpaghettiB表idname1Rutabaga2Pirate3Darth Vade4Ninja1、INNER JOINSELECT * FR
阅读全文
摘要:Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学
阅读全文
摘要:方法:mysql取分组后最新的一条记录,下面两种方法.一种是先筛选出最大和最新的时间,在连表查询.一种是先排序,然后在次分组查询(默认第一条),就是最新的一条数据了 #select * from t_assistant_article as a, (select max(base_id) as base_id, max(create_time) as create_time from t_assistant_article as b group by base_id ) as b where a.base_id=b.base_id and a.create_time = b.creat...
阅读全文