我有9k-20k記錄和使用索引。結果是輸入2分鐘,查詢報告5分鐘。優化查詢,php mysql
當我使用php時,它仍然需要循環每個產品,cz我需要創建一些複雜的報表,所以如果查詢時間增加時它更好。 感謝您的幫助。
MySQL查詢:
EXPLAIN select barang.merk, sum(new.total)
from barang,
(
SELECT
master.kode_barang,sum(master.jumlah_satuan_Terkecil) as total
FROM
master
Group by
master.kode_barang
) as new
where new.kode_barang=barang.nama_barang
group by barang.merk order by barang.id
結果:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 85 Using temporary; Using filesort
1 PRIMARY barang index NULL id 230 NULL 99 Using where; Using index; Using join buffer
2 DERIVED master index NULL id 175 NULL 9158 Using index; Using temporary; Using filesort
我的結構:
CREATE TABLE IF NOT EXISTS `master` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tanggal_nota` varchar(25) NOT NULL,
`no_nota` varchar(15) NOT NULL,
`nama_sales` varchar(60) NOT NULL,
`kode_kelurahan` varchar(25) NOT NULL,
`nama_customer_master` varchar(60) NOT NULL,
`alamat` varchar(100) NOT NULL,
`kode_barang` varchar(25) NOT NULL,
`jumlah_satuan_terkecil` varchar(15) NOT NULL,
`dpp_ppn` varchar(15) NOT NULL,
`persen_diskon_hco` int(15) NOT NULL,
`harga_hd` int(15) NOT NULL,
`value_hd` int(15) NOT NULL,
`kode_subkategori` varchar(5) NOT NULL,
`id_file` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`,`tanggal_nota`,`no_nota`,`nama_sales`,`kode_barang`,`jumlah_satuan_terkecil`,`kode_subkategori`,`id_file`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
另一個TABEL是看起來是這樣的:
CREATE TABLE IF NOT EXISTS `barang` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama_barang` varchar(100) NOT NULL,
`merk` varchar(60) NOT NULL,
`kategori` varchar(60) NOT NULL,
`principal` varchar(60) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`,`nama_barang`,`merk`,`kategori`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
我的指數
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Edit Drop Drop PRIMARY BTREE Yes No id 9254 A
Edit Edit Drop Drop id BTREE No No id 9254 A
tanggal_nota 9254 A
no_nota 9254 A
nama_sales 9254 A
kode_barang 9254 A
jumlah_satuan_terkecil 9254 A
kode_subkategori 9254 A
id_file 9254 A YES
另一個指標:
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment
Edit Edit Drop Drop PRIMARY BTREE Yes No id 99 A
Edit Edit Drop Drop id BTREE No No id 99 A
nama_barang 99 A
merk 99 A
kategori 99 A
我使用innodb waait分鐘,我會顯示結構.. –
如果您將它們添加爲索引,那麼會縮短很多。特別是你在MySQL中的種類。 – user2420647
如果您爲kode_barang和jumlah_satuan_Terkecil添加索引 – user2420647