Har*_*der 3 mysql performance update
在这个脚本上花时间
UPDATE
uk_data AS ud
INNER JOIN
uk_pc AS up
ON ud.cat10 = up.WardCode
SET
ud.cat8 = up.Latitude,
ud.cat9 = up.Longitude;
Run Code Online (Sandbox Code Playgroud)
uk_pc
表有 1,755,213 个条目和uk_data
24,510 个条目。
在我没有时间的情况下,还有其他方法可以做到这一点吗?
我想更新uk_data
cat8
和cat9
与uk_pc
Latitude
和Longitude
。
Table1: uk_pc
Latitude
Longitude
WardCode
Table2: uk_data
cat8
cat9
cat10
Run Code Online (Sandbox Code Playgroud)
在两个表中WardCode
并且cat10
具有相同的值。
表定义
表1 uk_data
CREATE TABLE IF NOT EXISTS `uk_data` (
`slno` int(100) NOT NULL AUTO_INCREMENT,
`comp_name` varchar(150) DEFAULT NULL,
`comp_no` varchar(50) DEFAULT NULL,
`comp_street` varchar(100) DEFAULT NULL,
`comp_area` varchar(100) DEFAULT NULL,
`comp_post_code` varchar(50) DEFAULT NULL,
`comp_phone` varchar(100) DEFAULT NULL,
`comp_phone1` varchar(100) DEFAULT NULL,
`cat1` varchar(100) DEFAULT NULL,
`cat2` varchar(100) DEFAULT NULL,
`cat3` varchar(100) DEFAULT NULL,
`cat4` varchar(100) DEFAULT NULL,
`cat5` varchar(100) DEFAULT NULL,
`cat6` varchar(100) DEFAULT NULL,
`cat7` varchar(100) DEFAULT NULL,
`cat8` varchar(100) DEFAULT NULL,
`cat9` varchar(100) DEFAULT NULL,
`cat10` varchar(100) DEFAULT NULL,
PRIMARY KEY (`slno`),
UNIQUE KEY `Phone` (`comp_phone`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=31717 ;
Run Code Online (Sandbox Code Playgroud)
表2(uk_pc)
DROP TABLE IF EXISTS `uk_pc`;
CREATE TABLE `uk_pc` (
`slno` int(11) NOT NULL AUTO_INCREMENT,
`Postcode` varchar(25) DEFAULT NULL,
`Latitude
Latitude` decimal(9,6) DEFAULT NULL,
`Longitude` decimal(9,6) DEFAULT NULL,
`Easting` varchar(25) DEFAULT NULL,
`Northing` varchar(25) DEFAULT NULL,
`GridRef` varchar(25) DEFAULT NULL,
`County` varchar(25) DEFAULT NULL,
`District` varchar(25) DEFAULT NULL,
`Ward` varchar(25) DEFAULT NULL,
`DistrictCode` varchar(25) DEFAULT NULL,
`WardCode` varchar(15) DEFAULT NULL,
`Country` varchar(25) DEFAULT NULL,
`CountyCode` varchar(25) DEFAULT NULL,
PRIMARY KEY (`slno`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
至少,你应该在 uk_pc 上有一个关于 WardCode 的索引。如果您还添加了纬度和经度,它将覆盖此查询,因此根本不需要使用该表。
你的数据类型并不是最有效的,所以我肯定会重新审视你的表设计。较窄的列(纬度和经度最好是十进制,并且永远不会是 100 个字符长)在表中存储更好(当然在索引中也是如此)。varchar 列的宽度似乎是您不必担心的事情,但它确实会影响数据库引擎在执行查询时留出的内容,因为它不知道它是否会遇到数据中更大的字符串。一般来说,像这样限制工作集只会有所帮助,尤其是在很容易预见的情况下。
归档时间: |
|
查看次数: |
3262 次 |
最近记录: |