2011-11-02 5 views
16

मेरे पास मेरी PHP फ़ाइल पर एक फ़ंक्शन है जो जांचता है कि कोई आईपी प्रतिबंधित है या नहीं। किसी कारण से मेरी साइट बहुत धीमी है और समस्या तब होती है जब मैं जांचता हूं कि आईपी प्रतिबंधित है या नहीं।mysql क्वेरी धीमी - आईपी लुकअप (प्रतिबंधित या नहीं)

(मैं कोड है कि जाँच करता है को हटाने और अपनी साइट तेजी से फिर से किया गया था)

यहाँ मेरी कोड है:

// index.php - everything redirects to this file in the .htaccess 
<?php 
include('config.php'); 
if(isIpBanned($_SERVER['REMOTE_ADDR'])) { 
die('access denied'); 
} 
// rest of the code 

यहाँ मेरी समारोह

// config.php 
<?php 
function isIpBanned($db, $ip) { // $db is declared correctly 
$goodIP = $db->getRecord("SELECT is_banned FROM security.ip WHERE ip = '$ip'"); // this function works and return 1 or 0 
return (bool)$goodIP; 
} 

इस सवाल के बारे में 2 सेकंड लेता है चलाने के लिए 3 सेकंड। क्यूं कर? मैंने शामिल नहीं किया है या अन्य टेबल नहीं छोड़े हैं।

धन्यवाद

उत्तर

26
  1. IP स्तंभ
  2. उपयोग सही डेटाप्रकार पर एक (? अद्वितीय) सूचकांक रखो (एक IPv4, एक INT UNSIGNED में फिट बैठता है 2 BIGINT UNSIGNED में एक IPv6) एक "मूल" एक के लिए शाब्दिक प्रतिनिधित्व परिवर्तित करके: यह एक ओर टिप्पणी के रूप में अपने टेबल छोटे हो जाएंगे, और स्कैन

के दौरान कम आई/ओ की आवश्यकता होगी और,, भले ही $_SERVER["REMOTE_ADDR"] सुरक्षित होना चाहिए, SQL क्वेरी में डेटा से बचने के लिए भूल कभी नहीं!

+0

1.1.1.1 एक इंटरजर नहीं है, तो आप डेटा प्रकार के रूप में कैसे आईएनटी कर सकते हैं? –

+0

@ जीनो लुकअप 'ip2long' और' long2ip' PHP फ़ंक्शन या 'INET_ATON()' और 'INET_NTOA()' MySQL फ़ंक्शंस – CAFxX

+0

INT लुकअप के लिए CHAR (20) से तेज है? –

2

आईपी कॉलम पर एक इंडेक्स रखें।

क्वेरी विश्लेषण और सुधार पर वेब पर सचमुच जानकारी है, इसलिए मैं आपके लिए इसे दोहराने वाला नहीं हूं, लेकिन एक सूचकांक निश्चित रूप से मदद करेगा।

मुझे लगता है कि security.ip एक बहुत बड़ी तालिका है, इसलिए लुकअप धीमा हो जाता है।

एक सूचकांक की कमी: लेखन कुछ हद तक धीमा हो जाता है, इसलिए यदि आप उस तालिका में बहुत कुछ लिखते हैं, तो आप banned_ips कहें, एक नई तालिका में प्रतिबंध लगाने वाले हिस्से को ऑफ़लोड करने का प्रयास कर सकते हैं।

संबंधित मुद्दे