gpt4 book ai didi

mysql - 改善 MySQL 慢查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:33 27 4
gpt4 key购买 nike

我正在使用 new relic 来诊断和修复我们数据库的性能问题。所以我有以下最耗时的查询。

SELECT * FROM `page_view` 
WHERE `ip_address` = ?s
AND `param` = ?n
AND NOW() < DATE_ADD(`date`, INTERVAL 1 DAY);

表结构如下:

CREATE TABLE `page_view` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_pages` varchar(255) NOT NULL,
`id_user` int(11) NOT NULL DEFAULT '0',
`param` varchar(255) NOT NULL DEFAULT '',
`contract_id` int(10) NOT NULL,
`listing_type_sid` int(11) DEFAULT NULL,
`ip_address` varchar(255) DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id_pages` (`id_pages`),
KEY `id_user` (`id_user`),
KEY `param` (`param`),
KEY `contract_id` (`contract_id`)
) ENGINE=MyISAM AUTO_INCREMENT=207 DEFAULT CHARSET=utf8;

在处理查询方面我是新手,但如果有任何提示可以提高查询的性能,我将不胜感激。

谢谢。

最佳答案

实现适当的索引。

并且在可能的情况下,当裸列上的等效谓词可用时,不要在谓词表达式中包装列。例如,这个:

NOW() < DATE_ADD(`date`, INTERVAL 1 DAY);

可以这样替换:

`date` > NOW() + INTERVAL -1 DAY

对于后一种形式,右侧被评估一次,成为一个文字,MySQL 可以考虑对 date 列进行索引范围扫描操作以满足谓词。

对于先前的形式,这迫使 MySQL 计算右侧的表达式并将结果与​​每一行的文字进行比较(或者,至少,未被其他谓词过滤掉的每一行。)

对于此查询最合适的索引是先有等式谓词的列,然后是不等式的列:

... ON page_view (ip_address, param, `date`)

关于mysql - 改善 MySQL 慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com