Sql kimliği ile birden çok satır seçmek için en iyi yolu nedir?

5 Cevap php

Ben birden fazla kayıt seçmek gerekir

Ben kullanmak

SELECT *
FROM `table`
WHERE `ID` =5623
OR `ID` =5625
OR `ID` =5628
OR `ID` =5621

Bu sorgu her saniye katiyen php 4 kez çalıştırmak

Bu daha iyi ve daha hızlı bir yolu var mı?

5 Cevap

SELECT *
FROM `table`
where ID in (5263, 5625, 5628, 5621) 

muhtemelen daha iyi, ama hızlı değil.

Insanlar (where id in) belirtilen ne üstüne:

Kimlikleri bir yeri vardır iF 1), daha iyi bir geçici tabloya onları sopa ve bir o geçici tablo ile katılmak çalıştırmak için

2) masa kimliği üzerinde bir dizin olduğundan emin olun

3) verilerin gerçek zamanlama kritik değilse, uygulama tarafında bir önbellekte sorgu sonuçlarını koymak

SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)

But four times per second is a lot. Ben az veritabanı erişimi gereken bir başka yaklaşımı hakkında düşünmek istiyorum.

SELECT *
FROM `table`
WHERE `ID` in (5623, 5625, 5628, 5621)

Bu araştırma sırasında ayrıca bir ortak tablo ifade (CTE) içine kimlikleri listesi oluşturma ve üzerinde katılarak, Madde In den daha hızlı SQL performansı almak için bir dizi nasıl kullanılacağını açıklıyor post ilginç bir blog geldi söyledi.

Yani maksimum performans elde etmek için aşağıdakilerden PHP eşdeğer kod olabilir.

DECLARE  @idList varchar(256) 
SET @idList = '5623, 5625, 5628, 5621'

;with ids (id) as
(
    SELECT value FROM UTILfn_Split(@idList,',')
)

SELECT     t.* 
FROM     table as t
INNER JOIN    ids
ON        t.ID = ids.id

Eğer yaparsanız

SELECT *
FROM `table`
WHERE `ID` IN (5623, 5625, 5628, 5621)

Bu sürece kimlikleri sayısı çok büyük alamadım gibi, ince olmalıdır. Ben kimlikleri için bir dizin oluşturabilirsiniz öneririm, böylece sorgu daha hızlı gerçekleştirir.

Ayrıca, mantığı değiştirmeden düşünün, böylece bu çok kimlikleri geçmek zorunda değilsiniz