小编MEC*_*ECU的帖子

如何加速这个缓慢的简单查询?

SELECT * FROM `game` 
WHERE (hometeam=29 OR awayteam=29) 
  AND `sportid`=1 
  AND`date` BETWEEN '2012-07-01' AND '2013-06-30'
  AND deleted=0
Run Code Online (Sandbox Code Playgroud)

这个简单的查询需要 0.5-1.1 秒(没有缓存)。表孔 1.6M 行,所以我认为它应该快得多(<0.1 秒)。在下面的解释中,它显示它正在搜索表的一半。您可以看到我尝试了各种索引变体,但都没有运气,它总是想使用 Sportid 索引。

id | select_type | table | type | possible_keys                                                                            | key     | key_len | ref   | rows   | Extra
1  | SIMPLE      | game  | ref  | date,hometeam,awayteam,sportid,deleted,sportid_2,sportid_3,sportid_4,sportid_5,sportid_6 | sportid | 1       | const | 800368 | Using where
Run Code Online (Sandbox Code Playgroud)

SHOW CREATE TABLE 游戏

CREATE TABLE `game` (
 `gameid` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `sportid` tinyint(1) …
Run Code Online (Sandbox Code Playgroud)

mysql

8
推荐指数
1
解决办法
1万
查看次数

在某些行上交换列?

我有一个大约 106k 行的表,其中大约 11k 行交换了 2 列中的值。我想运行一个查询来修复它,但我认为我不能这样做:

UPDATE `game` 
SET `homescore`=`awayscore`, `awayscore`=`homescore` 
WHERE (`awayscore`>`homescore` AND `winner`=`hometeam`) OR (`awayscore`<`homescore` AND `winner`=`awayteam`);
Run Code Online (Sandbox Code Playgroud)

或者我可以吗?我担心这两个分数最终会得到相同的值。

另外,请验证我的查询是否符合我的意图:

我需要在记录的获胜者(这是正确的)与记录的分数不匹配的行上交换主客场得分(他们被现已修复的编码错误意外交换)说谁是获胜者(得分更高的球队) )。

mysql

1
推荐指数
2
解决办法
4242
查看次数

标签 统计

mysql ×2