SQL Server低效查询(服务器满载)

时间:2018-02-26 10:37:35

标签: sql sql-server query-performance

我们目前正在从各种不同来源抓取结构化数据。在将新数据提取到表中之前,我们检查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 | +-------------------+--------------+-----------+

0 个答案:

没有答案