簡體   English   中英

如何提高選擇查詢的性能

[英]how to improve performance of select query

我已經使用mysql在具有45列的表中創建了該表中的總計30000數據

我必須從該表中檢索所有數據,但是這需要很長時間,因此我想進行一些優化。 我已經應用了主鍵和唯一鍵,希望進一步提高性能。

請告知我還能使用什么? 下面是創建和選擇語句

CREATE TABLE TISMCT 
(
    MASTER_ID         INTEGER AUTO_INCREMENT PRIMARY KEY,             
    SLIP_NO               BIGINT UNIQUE,
    TRUCK_NO          VARCHAR(20),
    SUB_TRANSPORTER_NAME  VARCHAR(50),
    VMS_IN_WB_NO          VARCHAR(10),
    VMS_IN_WB_USER        VARCHAR(50),
    VMS_IN_DATE           DATE,
    VMS_IN_TIME           TIME,
    VMS_TARE_WEIGHT       DECIMAL(11,3),
    VMS_OUT_WB_NO         VARCHAR(10),
    VMS_OUT_WB_USER       VARCHAR(50),
    VMS_OUT_DATE          DATE,
    VMS_OUT_TIME          TIME,
    VMS_GROSS_WEIGHT      DECIMAL(11,3),
    VMS_NET_WEIGHT        DECIMAL(11,3),
    INVOICE_NO            INTEGER,
    ROYALITY_TYPE         VARCHAR(10),
    ROYALTY_PASS_NO       VARCHAR(50),
    EXCISE_AMOUNT         DECIMAL(11,3),
    EDU_CESS_AMOUNT       DECIMAL(11,3),
    HSECESS_AMOUNT        DECIMAL(11,3),
    CLEAN_ENG_CESS_AMOUNT DECIMAL(11,3),
    ROYALTY_AMOUNT       DECIMAL(11,3), 
    BAL_ROYALTY_AMOUNT   DECIMAL(20,3),
    VS_IN_WB_NO           VARCHAR(10),
    VS_IN_WB_USER         VARCHAR(50),
    VS_IN_DATE            DATE,
    VS_IN_TIME            TIME,
    VS_GROSS_WEIGHT       DECIMAL(11,3),
    VS_OUT_WB_NO          VARCHAR(10),
    VS_OUT_WB_USER        VARCHAR(50),
    VS_OUT_DATE       DATE,
    VS_OUT_TIME       TIME,
    VS_TARE_WEIGHT        DECIMAL(11,3),
    VS_NET_WEIGHT         DECIMAL(11,3),
    DUMP_LOCATION         VARCHAR(50),
    IS_BILLED         CHAR(1),
    IS_ACTIVE         CHAR(1),
    CREATED_DT        DATE,
    MODIFY_DT         DATE,
    CREATED_BY            VARCHAR(50),
    MODIFY_BY             VARCHAR(50),
    EXTRA_FIELD1          VARCHAR(50),
    EXTRA_FIELD2          VARCHAR(50),
    EXTRA_FIELD3          VARCHAR(50)
);

詢問

SELECT 
  MASTER_ID,
  SLIP_NO,
  TRUCK_NO,
  SUB_TRANSPORTER_NAME,
  VMS_IN_WB_NO,
  VMS_IN_WB_USER,
  VMS_IN_DATE,
  VMS_IN_TIME,
  VMS_TARE_WEIGHT,
  VMS_OUT_WB_NO,
  VMS_OUT_WB_USER,
  VMS_OUT_DATE,
  VMS_OUT_TIME,
  VMS_GROSS_WEIGHT,
  VMS_NET_WEIGHT,
  INVOICE_NO,
  ROYALITY_TYPE,
  ROYALTY_PASS_NO,
  EDU_CESS_AMOUNT,
  HSECESS_AMOUNT,
  CLEAN_ENG_CESS_AMOUNT,
  ROYALTY_AMOUNT,
  BAL_ROYALTY_AMOUNT,
  VS_IN_WB_NO,
  VS_IN_WB_USER,
  VS_IN_DATE,
  VS_IN_TIME,
  VS_GROSS_WEIGHT,
  VS_OUT_WB_NO,
  VS_OUT_WB_USER,
  VS_OUT_DATE,
  VS_OUT_TIME,
  VS_TARE_WEIGHT,
  VS_NET_WEIGHT,
  DUMP_LOCATION,
  IS_BILLED,
  IS_ACTIVE,
  CREATED_DT,
  MODIFY_DT,
  CREATED_BY,
  MODIFY_BY,
  EXTRA_FIELD1,
  EXTRA_FIELD2,
  EXTRA_FIELD3 
FROM
  TISMCT 
WHERE IS_BILLED = 'Y' 
  AND IS_ACTIVE = 'Y' 
ORDER BY CREATED_DT DESC ;

好吧,如果您真的需要表和每個記錄集中的所有內容,那么您將無能為力。 並非mysql必須先搜索內容,只是您需要所有數據,而Server需要花費時間將其發送給您。

您出於什么原因需要所有數據? 也許您可以考慮一下那部分。

在選擇本身中,您可以指定一些條件。 您是否真的要檢索所有數據,還是最新的還是最舊的數據。 根據您的要求,您可以修改查詢。

如果要基於日期列的最新數據,例如:

Select top 1000 
    column1, colunm2,...... 
From 
    table 
Order By 
    date Desc

這將檢索最新的1000條記錄。

如果您想要基於日期列的最早的數據

Select top 1000 column1, colunm2,...... 
from table 
order by date asc

這將返回最早的1000條記錄。

(或)放在有條件的地方

Select top 1000 column1, colunm2,...... 
from table 
where column = 1234 
order by date asc

明確您的需求並相應地優化查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM