首頁>Program>source

嘿,我一直在研究SQL_BIG_SELECTS,但是到目前為止,MySQL文件一直没有帮助.我正在尋找一些防止出現以下錯誤的见解。

ERROR 1104: The SELECT would examine too many records and probably take a very long time. Check your WHERE and use SET OPTION SQL_BIG_SELECTS=1 if the SELECT is ok

  1. MySQL決定查詢多少行為"大選擇"?
  2. 正確的索引編製通常可以解決此問题吗?
  3. 是將SQL_BIG_SELECTS视為"最後的選擇",還是好的做法?
  4. 有人將如何在配置中設置" SQL_BIG_SELECTS = 1"(無需執行查詢)?
  5. 還有其他值得了解的替代方法吗?

提前谢谢!

最新回復
  • 5月前
    1 #

    MySQL根据" max_join_size"的值確定查詢是否為"大選擇".如果查詢可能需要檢查的行數超過此數目,則將其视為"大選擇".使用"顯示變數"查看最大連線大小的值。

    我相信索引以及特別好的where子句可以防止出現此問题。

    SQL_BIG_SELECTS用於防止使用者意外執行過大的查詢.可以在mysql.cnf中將其設置為ON或在啟動時使用命令列選項。

    您可以在my.cnf或服務器啟動時設置SQL_BIG_SELECTS.也可以与 SET SESSION SQL_BIG_SELECTS=1进行会话設置

    我想不到.我只是檢查您的查詢以確保您確實需要使用它.我们的服務器預設情况下將其打開,並且max_join_size非常大。

  • 5月前
    2 #

    不能設置 SQL_BIG_SELECTS 在my.cnf或服務器啟動時,因為它是仅会话引數.我正在使用MySQL 5.0.60.這種變數不支援。

    我在Symfony應用程式中遇到了同樣的問题,顯示了這个令人讨厌的錯誤:

    The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
    

    但是您可以增加varialbe的數量

    max_join_size与sql_big_selects相關

    我能够以特權的mysql使用者身份執行命令来修複它:

    # SET GLOBAL max_join_size=18446744073709551615;
    

    或者您可以將其包含在my.cnf中,因為允许在配置檔案中設置max_join_size

    好吧,我希望這能對其他人有所帮助。

  • 5月前
    3 #

    我在db中有超過2000k的記錄,而我的查詢是大型選擇,它详尽地比较了某些欄位的重複删除和更新.. mysql告诉了我同樣的道理 (答案日期的当前版本),我最终使用了 index 在涉及 where的2个领域上 條款...這也應该對其他人有帮助...對我有用的步骤是:

    在欄位上設置索引

    分析表

    執行查詢

    HTH

  • 5月前
    4 #

    以下命令對我有用

    SET GLOBAL max_join_size=18446744073709551615;
    

    但是我需要放入my.cnf檔案而不是命令什麼? 順便說一句,我正在使用" 5.6.12 MySQL Community Server"

  • 如何在C ++容器中儲存不同型別的物件?
  • MySQL向資料庫授予除一张表以外的所有特權