我们目前正在从各种不同来源抓取结构化数据。在将新数据提取到表中之前,我们检查data_id是否已经存在。
IF NOT EXISTS (SELECT TOP 1 * FROM TABLE_NAME WHERE DATA_ID=@P0)
我们没有索引;但是,我们的id列的PK设置似乎是不必要的,我们应该删除它以提高插入速度吗?
我们的服务器目前正在通过300万左右的数据进行满负荷检查,以确保我们不会插入重复数据。我们已经尝试升级我们的SQL Server以获得更高的DTU,但这似乎并没有帮助。
当我们同时运行多个作业检查唯一数据或SQL Server进行爬行并且插入速度需要永远。
我们是否应该删除此唯一数据检查并为每个抓取作业创建新表,然后使用SQL查询来比较差异,例如新数据或已删除的数据?
用于条件插入的查询:
String sql = "IF NOT EXISTS (SELECT TOP 1 * FROM A_PROV_CVV_LDG_1 WHERE DATA_ID=?) " +
"INSERT INTO A_PROV_CVV_LDG_1 (DATA_ID, SourceID, BASE_ID, BIN, BANK, CARD_TYPE, CARD_CLASS," +
" CARD_LEVEL, CARD_EXP, COUNTRY, STATE, CITY, ZIP, DOB, SSN, EMAIL, PHONE, GENDER, ADDR_LINE_1, ADDR_LINE_2," +
" FIRST_NAME, LAST_NAME, DateAddedToMarket, PRICE) " +
"VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
这是整个表的定义,没有索引只有PK是' id'这似乎没必要。
+-------------------+--------------+-----------+
| (PK)id | int | Unchecked |
| DATA_ID | int | Checked |
| SourceID | int | Checked |
| BASE_ID | varchar(255) | Checked |
| BIN | varchar(255) | Checked |
| BANK | varchar(255) | Checked |
| CARD_TYPE | varchar(255) | Checked |
| CARD_CLASS | varchar(255) | Checked |
| CARD_LEVEL | varchar(255) | Checked |
| CARD_EXP | varchar(255) | Checked |
| COUNTRY | varchar(255) | Checked |
| STATE | varchar(255) | Checked |
| CITY | varchar(255) | Checked |
| ZIP | varchar(255) | Checked |
| DOB | varchar(255) | Checked |
| SSN | varchar(255) | Checked |
| EMAIL | varchar(255) | Checked |
| PHONE | varchar(255) | Checked |
| GENDER | varchar(255) | Checked |
| ADDR_LINE_1 | varchar(255) | Checked |
| ADDR_LINE_2 | varchar(255) | Checked |
| FIRST_NAME | varchar(255) | Checked |
| LAST_NAME | varchar(255) | Checked |
| PRICE | varchar(255) | Checked |
| DateAddedToMarket | varchar(255) | Checked |
| DateAdded | datetime | Unchecked |
+-------------------+--------------+-----------+