【发布时间】:2014-01-31 16:44:00
【问题描述】:
使用 MySQL(确切地说是 MariaDB)。我有以下脚本,需要每隔一天运行一次才能更新我的数据库,但速度慢得让人难以忍受。每个要更新的表都需要数小时才能运行。这是一个shell 脚本:
CMD_MYSQL="${MYSQL_DIR}mysql --local-infile=1 --default-character-set=utf8 --protocol=${MYSQL_PROTOCOL} --port=${MYSQL_PORT} --user=${MYSQL_USER} --pass=${MYSQL_PASS} --host=${MYSQL_HOST} --database=${MYSQL_DB}"
### Update MySQL Data ###
## table name are lowercase
tablename=`echo $FILE | tr "[[:upper:]]" "[[:lower:]]"`
echo "Uploading ($FILE) to ($MYSQL_DB.$tablename) with REPLACE option..."
## let's try with the REPLACE OPTION
$CMD_MYSQL --execute="LOAD DATA LOCAL INFILE '$FILE.txt' REPLACE INTO TABLE $tablename CHARACTER SET utf8 FIELDS TERMINATED BY '|' IGNORE 1 LINES;"
## we need to erase the records, NOT updated today
echo "erasing old records from ($tablename)..."
$CMD_MYSQL --execute="DELETE FROM $tablename WHERE datediff(TimeStamp, now()) < 0;"
您可以放心地忽略文件中其他位置设置的一些变量。 $FILE 通常是由| 分隔的txt 文件。每行代表一条记录,例如:
AirportID|AirportCode|AirportName|Latitude|Longitude|MainCityID|CountryCode
6024358|DME|Moscow, Russia (DME-Domodedovo Intl.)|55.414495|37.899907|2395|RU
6024360|DMM|Dammam, Saudi Arabia (DMM-King Fahd Intl.)|26.468075|49.796824|180543|SA
脚本在现有数据库上运行,在该数据库中可以找到旧记录。然后它会检查其上次更新日期,并执行REPLACE INTO,但对于一个 100MB 的txt 文件,通常需要 8 小时。
如何显着提高速度?
【问题讨论】:
-
表格是否被索引?
-
@G-Nugget 是的。