查询游戏历史成绩最高分前100
SELECT ps.* FROM cdb_playsgame ps WHERE ps.credits=(select MAX(credits)
FROM cdb_playsgame ps1
where ps.uid=ps1.uid AND ps.gametag=ps1.gametag) AND ps.gametag='yeti3'
GROUP BY ps.uid order by ps.credits desc LIMIT 100;
SELECT ps.*
FROM cdb_playsgame ps,(select ps1.uid, ps1.gametag, MAX(credits) as credits
FROM cdb_playsgame ps1 group by uid,gametag) t
WHERE ps.credits=t.credits AND ps.uid=t.uid AND ps.gametag=t.gametag AND ps.gametag='yeti3'
GROUP BY ps.uid order by ps.credits desc LIMIT 100;
执行时间仅为0.22秒,比原来的25秒提高了10000倍
查询当天游戏最好成绩
SELECT ps. * , mf. * , m.username
FROM cdb_playsgame ps
LEFT JOIN cdb_memberfields mf ON mf.uid = ps.uid
LEFT JOIN cdb_members m ON m.uid = ps.uid
WHERE ps.gametag = 'chuansj'
AND FROM_UNIXTIME( ps.dateline, '%Y%m%d' ) = '20081008'
AND ps.credits = (
SELECT MAX( ps1.credits )
FROM cdb_playsgame ps1
WHERE ps.uid = ps1.uid
AND ps1.gametag = 'chuansj'
AND FROM_UNIXTIME( ps1.dateline, '%Y%m%d' ) = '20081008' )
GROUP BY ps.uid
ORDER BY credits DESC
LIMIT 0 , 50
像查询里
AND ps.credits=(SELECT MAX(ps1.credits)
FROM {$tablepre}playsgame ps1 where ps.uid=ps1.uid AND ps1.gametag = '$game'
AND FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime' )
特别消耗时间
另外,像:
FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime'
这样的语句会导致索引无效,因为对每个dataline的值都需要用函数计算一遍,需要调整为:
AND ps1.dateline >= UNIX_TIMESTAMP('$todaytime')
//更改后
SELECT ps. * , mf. * , m.username
FROM cdb_playsgame ps, cdb_memberfields mf, cdb_members m, (
SELECT ps1.uid, MAX( ps1.credits ) AS credits
FROM cdb_playsgame ps1
WHERE ps1.gametag = 'chuansj'
AND ps1.dateline >= UNIX_TIMESTAMP( '20081008' )
GROUP BY ps1.uid
) AS t
WHERE mf.uid = ps.uid
AND m.uid = ps.uid
AND ps.gametag = 'chuansj'
AND ps.credits = t.credits
AND ps.uid = t.uid
GROUP BY ps.uid
ORDER BY credits DESC
LIMIT 0 , 50
对于每个球员,找出球员号码,名字以及他所引起的罚款的号码,但只是针对那些至少有两次罚款的球员。
更紧凑的查询,在FROM子句中放置一个子查询。
SELECT PLAYERNO,NAME,NUMBER
FROM (SELECT PLAYERNO,NAME,
(SELECT COUNT(*)
FROM PENALTIES
WHERE PENALTIES.PLAYERNO =
PLAYERS.PLAYERNO)
AS NUMBER
FROM PLYERS) AS PN
WHERE NUMBER>=2
FROM子句中的子查询决定了每个球员的号码,名字和罚款的编号。接下来,这个号码变成了中间结果中的一列。然后指定了一个条件(NUMBER>=2);最后,获取SELECT子句中的列。
分享到:
相关推荐
教程名称:大型门户网站核心技术-Mysql优化 课程目录:【】Mysql优化 资料【】Mysql优化01关键技术【】Mysql优化02表的设计【】Mysql优化03慢查询(一)【】Mysql优化04慢查询(二)【】Mysql优化05慢查询(三)【】Mysql...
从实践看,MySQL的子查询优化技术的内容和范围,明确掌握子查询优化手段 预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写...
MySQL子查询和嵌套查询是数据库操作中常用的技术,它们在数据检索时起着关键作用。然而,不恰当的使用可能会导致性能下降,因此优化这些查询对于提高数据库系统的效率至关重要。 1. **子查询优化** - **最大值查询...
MySQL子查询是数据库查询中的一个重要概念,它允许在SQL语句内部嵌套其他查询,用于检索、比较或操作数据。子查询可以理解为一个独立的查询结果,它被用作外部查询的一部分,提供了灵活的数据处理能力。在本篇文章中...
### MySQL 子查询与连表查询的效率比较及优化 #### 一、子查询与连表查询概述 在SQL查询语言中,子查询与连表查询是两种非常重要的查询技术,广泛应用于各种复杂的业务场景中。为了更好地理解这两种查询方式的特点...
两小时解决所有问题--MySQL数据库性能优化
在阅读了《韩顺平 大型门户网站核心技术-Mysql优化-笔记***.pdf》文档之后,可以了解到关于MySQL数据库优化的多个关键技术和方法。以下是根据文档内容总结的知识点: 1. MySQL数据库优化技术主要包含以下方面: - ...
perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
- 子查询允许在查询中嵌套另一个查询,以获取更复杂的结果集。 - 视图提供了一种虚拟表,基于一个或多个表的查询结果。 3. **事务处理**: - 事务是数据库操作的一组逻辑单元,确保数据一致性。 - 事务的ACID...
合理设计数据库结构,正确使用外键以保证数据一致性,运用适当的表连接和子查询来获取所需信息,以及根据查询需求创建和管理索引,都将直接影响到系统性能。因此,深入理解并熟练掌握这些知识点,是成为合格的数据库...
* 查询优化:包括优化查询语句、索引优化和查询执行计划优化等。 * 索引优化:包括创建合适的索引、索引维护和索引优化等。 * 存储引擎优化:包括选择合适的存储引擎、调整存储引擎的参数和优化存储引擎的性能等。 *...
教程名称:韩顺平-Mysql优化系列视频教程(19讲)课程目录:【】Mysql优化01 关键技术【】Mysql优化02 表的设计【】Mysql优化03 慢查询(一)【】Mysql优化04 慢查询(二)【】Mysql优化05 慢查询(三)【】Mysql优化06 ...
《深入浅出-MySQL数据库开发、优化与管理维护》是一本专为IT专业人士设计的全面指南,涵盖了MySQL数据库从基础到高级的各个方面。这本书旨在帮助读者深入理解MySQL的内部机制,提升开发效率,优化数据库性能,并掌握...
总的来说,MSSQL-to-MySQL v5.3是数据库管理员和开发人员的得力助手,它简化了跨平台数据库迁移的复杂过程,提高了工作效率,为企业的数据管理提供了便利。对于那些需要在MSSQL和MySQL之间切换的用户,这款工具无疑...
在构建大型门户网站时,数据库设计和优化是至关重要的环节,特别是在使用MySQL这样的关系型数据库管理系统时。本主题将深入探讨“大型门户网站核心技术-Mysql优化02表的设计”,以确保高效的数据存储、检索和处理...
php-mysql查询优化简单实例.doc
我的mysql优化日记 我的mysql优化日记 我的mysql优化日记 我的mysql优化日记
1. **MySQL数据库开发规范1.2.doc**:这份文档可能列出了MySQL数据库开发的一系列规则和最佳实践,包括但不限于数据类型的选择、表结构设计、事务处理、错误处理和日志记录等。规范通常旨在减少潜在的性能瓶颈和提升...
wampserver2.2e-php5.3.13-httpd2.2.22-mysql5.5.24-32b.exe