gpt4 book ai didi

mysql - 优化两个简单的MySQL查询——列索引

转载 作者:行者123 更新时间:2023-11-29 21:33:41 26 4
gpt4 key购买 nike

我是 MySQL 查询优化的新手,需要有关如何优化两个查询的数据库的建议 - 我应该设置哪些索引以及在哪里设置。下面是数据库结构和查询。

CREATE TABLE `data_node` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`type` enum('node','place') DEFAULT NULL,
`name` varchar(255) DEFAULT '',
`source_id` bigint(20) unsigned DEFAULT NULL,
`data_id` bigint(20) unsigned NOT NULL,
`data_lat` decimal(8,6) NOT NULL,
`data_lon` decimal(9,6) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `data_node_tag` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`node_id` bigint(20) unsigned NOT NULL,
`data_key` varchar(255) NOT NULL DEFAULT '',
`data_value` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第一个查询:

SELECT *
FROM data_node n
LEFT JOIN data_node_tag nt ON nt.node_id = n.id
WHERE n.type = "place"
AND nt.data_value LIKE "%place%"
GROUP BY n.data_id LIMIT 100

第二个查询:

SELECT *
FROM data_node n
LEFT JOIN data_node_tag nt ON nt.node_id = n.id
WHERE n.source_id = 123
AND n.type = "node"
AND nt.data_value = "cafe"
AND (n.data_lat BETWEEN 1.000000 AND 2.000000)
AND (n.data_lon BETWEEN 3.000000 AND 4.000000)
GROUP BY n.data_id LIMIT 1000

我将非常感谢您的帮助。

最佳答案

对于第一个查询,您需要在 data_node(type, id, data_id)data_node_tag(node_id, data_value) 上建立索引。

对于第二个查询,您需要在 data_node(source_id, type, data_lat, data_long, id)data_node_tag(id, data_value) 上建立索引(这是与第一个查询相同)。

关于mysql - 优化两个简单的MySQL查询——列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060950/

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