糟糕的sql語句 同事傳過來一個sql,說此sql運行期間大量占用服務器磁盤空間,大約將近10個G的空間,效率超慢 SELECT MIN(order_id), MAX(order_id) FROM (select *,date(order_creation_date) create_date from orders where (1 = 1) ) AS t1 1 又是一個糟糕的sql,select * from table_name 這種格式的sql是絕對不允許的 2 剛開始,沒看明白這個sql是要干嘛的,為什麼要從這個表裡查詢數據呢?select *,date(order_creation_date) create_date from orders where (1 = 1),作為嵌套表。 3 在查詢過程中,為什麼會占用磁盤空間 中間產生了臨時表,內存中放不下這麼多數據,把數據拷貝到磁盤中,一般在 /tmp 下面 產生類似 #sql_***.MYD,#sql_***.MYI 這樣的文件,其實就是一個myisam表。 這樣拷貝的過程浪費時間,影響性能。 咨詢同事,只是想查詢出order_id的最大值,最小值。 看了一下orders表結構,orders的order_id是自增主鍵,那就簡單了, 直接改寫如下 select max(order_id),min(order_id) from orders order_id 是自增主鍵,上面已經建了索引,而且是有序的,因此對於max min這種復合函數求最大最少值非常的快。