由于最近要做竞拍功能,竞拍规则:一个人可以多次竞拍出价,但是出最低价格而且不能重复价格的人竞拍成功 转换成SQL:获得表中某字段无重复记录最小值 当前表的SQL:获得auction_records表中auction_price字段无重复记录的最小值 这是通过: select auction_price from auction_records 查询出来的所有结果: 由于价格为1.00有重复,所以这里要取出的无重复记录的最低价是13.00; 以下SQL语句为解决办法: select min(auction_price) from (select auction_price from auction_records group by auction_price having count(*)=1) t
PHP与MySQL存储过程 添加: define('CLIENT_MULTI_RESULTS', 131072);//关键 $conn=mysql_connect("127.0.0.1","root","123456",1,CLIENT_MULTI_RESULTS) or die("数据库服务器连接错误".mysql_error()); mysql_select_db("test",$conn) or die("数据库访问错误".mysql_error()); mysql_query("set character set GBK"); mysql_query("set names GBK"); if($_POST){ $rs=mysql_query("call insertcategory('".$_POST['classname']."','".$_POST['sort']."')") or die(mysql_error()); if($rs){ echo <<<EOT <script lanuage="javascript"> alert('恭喜你,添加成功!'); history.back(-1); </script> EOT; }else{ echo <<<EOT <script lanuage="javascript"> alert('对不起,添加失败!'); history.back(-1); </script> EOT; } 添加存储过程: DELIMITER $$ DROP PROCEDURE IF EXISTS `test`.`insertcategory`$$ CREATE PROCEDURE `insertcategory`(in catesname varchar(100),in [...]
优化总结: 1.任何情况下SELECT COUNT(*) FROM xxx 是最优选择; 2.尽量减少SELECT COUNT(*) FROM xxx WHERE COL = ‘xxx’ 这种查询; 3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL = ‘xxx’ 的出现。(其中COL非主键) 环境: MySQL版本:5.0.45 OS:Windows XP SP3 数据表一:sphinx +———-+——————+——+—–+———+—————-+ | Field | Type | Null | Key | Default | Extra | +———-+——————+——+—–+———+—————-+ | id | int(10) unsigned | NO | PRI | [...]
使用索引查找数据行 索引的作用是可以快速找到记录——避免全表扫描。这通常是添加索引的主要理由。MySQL中最常见的B树索引能够加快相等和前缀范围匹配查询。所以对于(A,B)列上的索引,它可以用于如条件A=5 ; A BETWEEN 5 AND 10的查询;但对于条件A=5 AND B BETWEEN 5 AND 10,索引对B BETWEEN 5 AND 10这个子条件的筛选不起作用,因为B不是索引的前缀。可以通过查看explain结果的key_len字段获知查询实际上使用了联合索引的哪几部分。一个常见问题是查询仅使用了联合索引中选择性不强的一小部分前缀。 这个错误的原因是忽略了MySQL的一个限制:一旦遇到范围查询,将不再使用索引的其余部分。如果在这个索引上使用A BETWEEN 5 AND 10 AND B=5 的条件,那么仅使用索引中的A前缀查找记录。有意思的是,这个限制仅对区间查询,对枚举式的范围查询,MySQL可以使用整个索引。如果你把条件改为A IN (5,6,7,8,9,10) AND B=5 ,查询性能可能会得到极大的改进。需要小心的是,优化器对大量的枚举值是很难优化的。上面仅讨论了MySQL如何使用单独的一个索引,对于需要“索引合并”的多个索引的使用,规则将会复杂很多。 使用索引进行记录排序 B树索引的另外一个优点是——它能够返回有序的记录,从而在要求排序的查询中避免额外的排序处理。排序和查找需求通常是一起出现,成为创建索引的理由,但是也可以因为需要对数据进行排序而创建一个索引。此时可以在explain结果中看到查询将按照索引的顺序进行全表扫描。这就要求你知道在什么条件下,既可以利用索引进行排序,又可以限制记录的行数。对于索引(A,B),像ORDER BY A ; ORDER BY A,B ; ORDER BY A DESC, B DESC 将能够利用索引排序(注意,如果选择全部记录且没有where子句,MySQL不会用索引进行排序)。但是对ORDER BY B 或 ORDER BY A, B DESC 将无法使用索引排序,因为要求的顺序和B树的顺序不一致。如果同时使用筛选和排序,如A=5 ORDER BY B ; A=5 ORDER BY B DESC; A>5 ORDER BY A ; A>5 ORDER BY A,B ; A>5 [...]



