我编写了一个sql查询,如
select max(area_prefix) as called_area, location
from tabile_1
where '10012451373' like concat(area_prefix,'%')
提取 area_prefix
从 table_1
但这个查询太慢了,当我把这个查询放在实时服务器上时,它就需要 85.0sec
要获取数据,请使用 10012451373
作为一个 variable
. 有没有其他选择来提高性能。
现在的情况是,我们接到了来自世界各地的电话,所以我们必须取消 area_prefix
关于这个数字,所以我必须看到全部 area_prefix
在表中,要从数字所属的区域中分辨出这是数字所在的区域 concat
关键字已进入帮助,但它需要太多的时间,当它放在一个实时服务器上。关于地区有不同的表格。
CREATE TABLE `tariff_50` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`area_prefix` varchar(255) NOT NULL,
`location` varchar(255) NOT NULL,
`initial_increment` varchar(255) NOT NULL,
`default_increment` varchar(255) NOT NULL,
`rate` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`area_prefix`),
UNIQUE KEY `area_code` (`area_prefix`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=193542 DEFAULT CHARSET=latin1
如果不使用 CONCAT
关键字。
2条答案
按热度按时间dddzy1tm1#
我得到的答案是:
eqfvzcg82#
您遇到的问题是,此查询正在执行完整表扫描。你的网站上确实有索引
area_prefix
列(因为它是唯一的),但此查询未使用它。如果您真的想要提高性能,那么您需要彻底更改查询,以确保它在搜索时使用index seek操作符。下面显示的查询避免使用
LIKE
强迫使用=
. 它远比你的丑,但它会很快:我认为区域前缀的最大长度为10个字符。如果有较长的查询,请在此查询中添加更多行。
我知道它很难看,但它会燃烧得很快d